【问题标题】:Verifying Installation Directory is FAT验证安装目录是否为 FAT
【发布时间】:2019-01-09 13:59:01
【问题描述】:

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

我认为是这里的东西:

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

【问题讨论】:

  • 与文件系统的战斗顺利吗? NTFS 似乎是一切皆有可能的文件系统,没有什么是(所有)容易的。

标签: visual-studio visual-studio-2017 windows-installer installation


【解决方案1】:

首要任务:Visual Studio 安装项目非常有限,您最好寻找功能更强大的部署工具/框架:Application setup


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


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

自定义操作:如果您使用的是 Windows XP,我想您需要自定义操作,然后调用 WMI 或直接通过 Win32 API 来确定文件系统到底是什么。

Win32:带有一些用于 Win32 检查文件系统的示例模型代码的答案: Determine what filesystem a partition is of。用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

【讨论】:

  • 如果所选驱动器是 NTFS,我正在尝试阻止安装继续进行。我不支持 WinXP。
  • @Cryptoman:你搞错了。不继续使用 NTFS 将阻止您使用任何除了 Windows XP,因为 Vista 和仅使用 NTFS。
  • 从 Vista 开始,系统驱动器需要 NTFS,您是否安装到辅助分区?还是安装到 USB 驱动器?在后一种情况下,我认为您真的不需要安装程序吗?也许只是一个拉链?或者专门编写 USB 密钥的自定义 EXE。
  • @KenWhite 我现在明白了。无论哪种方式,请不要担心:我的程序将适用于禁用 USN 日志的任何内容。
  • @SteinÅsmul 只需安装在 USB 上。我们确实需要安装程序。
猜你喜欢
  • 2013-11-13
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2016-11-23
  • 2019-12-11
  • 2012-04-02
  • 2018-08-11
相关资源
最近更新 更多