首页 > 解决方案 > 验证安装目录是否为 FAT

问题描述

我想知道如何设置一种方法来验证安装目录是否为 FAT/FAT32/exFAT/任何没有 USN 日志的 USB。

我认为这是这里的东西:图片

我找不到任何关于我正在尝试做的事情的文档。我会尝试直接在我的程序中添加一些支持,但是通过检查,它可能会导致问题。

标签: visual-studiovisual-studio-2017windows-installerinstallation

解决方案


首先要做的事情:Visual Studio 设置项目非常有限,您最好寻找一个功能更强大的部署工具/框架:应用程序设置


仅限 NTFS:这听起来很奇特。现在甚至不可能在 NTFS 以外的任何设备上安装 Windows?来自 superuser.com:“ Windows Vista 和更高版本不会安装在 FAT32 分区上,只能安装在 NTFS 分区上。这可能是由于使用了符号链接(FAT32 不支持)。 ”我不有一个 MSDN 链接供您验证,但我很确定以上内容是正确的。


内置 MSI 功能:MSI 中可能有一个内置属性,将设置为系统驱动器的文件系统。我不熟悉任何此类属性。

自定义操作:如果您使用的是Windows XP,我想您需要一个自定义操作,然后调用WMI或直接通过Win32 API I 来确定文件系统的真正含义。

Win32:带有一些示例模拟代码的答案,用于对文件系统进行 Win32 检查: 确定分区所属的文件系统。用VS2017测试的内联版本,C++控制台项目:

#include "stdafx.h"
#include "Windows.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely used stuff from Windows.h (Crypto stuff?)

int main()
{
    WCHAR FSType[512];

    if (GetVolumeInformationW(L"C:\\", NULL, 0, NULL, NULL, NULL, FSType, ARRAYSIZE(FSType))) {
        MessageBox(NULL, FSType, L"File System:", MB_OK); 
        // TEXT("File System:") instead of L"File System:" if need be?
    }
}

WMI:您应该能够从以下位置获取信息Win32_LogicalDisk

SELECT FileSystem FROM Win32_LogicalDisk WHERE DeviceID='C:'

FileSystemObject:我忘记了可以使用 COM 脚本运行时:

Set fso = CreateObject("Scripting.FileSystemObject")
Set drive = fso.GetDrive(fso.GetDriveName("C:"))
MsgBox drive.FileSystem

推荐阅读