如何在 Inno Setup 中检查分区类型?

Kaz*_*aza 4 inno-setup pascalscript

我有一个需要执行安装程序的任务,他将检查分区类型(例如 FAT32、NTFS),如果分区不支持大于 4GB 的文件,则不允许安装。

老实说,我不知道如何才能做到这一点。你是否知道如何去做?也许是一些执行分区类型验证的代码?

如果您有任何想法来执行此任务,我将不胜感激。

Rob*_*beN 5

您的问题在这里有答案。

这个简单的例子检查wpSelectDir页面上的分区类型,如果NTFS在目标分区上检测到它允许进行安装过程。

它是为旧版本的 Inno Setup 编写的,因此需要进行一些更改(例如更改为MsgBox's Format2)如果您使用的是 Unicode Inno,您将不得不对其进行一些更改。

您将在下方找到为最新版本的 Unicode Inno Setup 更新的脚本。

[Setup]
AppName=Filesystem
AppVerName=Filesystem
Uninstallable=false
UpdateUninstallLogAppName=false
DisableDirPage=false
DisableProgramGroupPage=true
DefaultDirName={pf}\Filesystem
DisableStartupPrompt=true

[Code]
#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif
 
const
  MAX_PATH = 260;

function GetVolumeInformation(lpRootPathName: string; lpVolumeNameBuffer: string;
  nVolumeNameSize: DWORD; out lpVolumeSerialNumber: DWORD;
  out lpMaximumComponentLength: DWORD; out lpFileSystemFlags: DWORD;
  lpFileSystemNameBuffer: string; nFileSystemNameSize: DWORD): BOOL;
  external 'GetVolumeInformation{#AW}@kernel32.dll stdcall';

function NextButtonClick(CurPage: Integer): Boolean;
var srcdisk : String;
    sernum, dummy1, dummy2: DWORD;
    fstype: String;
begin
  Result := true;
  if CurPage = wpSelectDir then
  begin
    srcdisk := AddBackslash(ExtractFileDrive(WizardDirValue));
    fstype := StringOfChar(#0, MAX_PATH + 1);
    if not GetVolumeInformation(
             srcdisk, '', 0, sernum, dummy1, dummy2, fstype, Length(fstype)) then
    begin
      MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok);
      Result := false;
    end else
    begin
      fstype := Uppercase(Trim(fstype));
      MsgBox (Format('Volume %s has filesystem type (%s)', [
        srcdisk, fstype]), mbInformation, MB_OK);
      // Only carry on if the file system is NTFS.
      Result := (fstype = 'NTFS');
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)