3
我有任務需要執行安裝程序,他將檢查分區類型(例如FAT32,NTFS),如果分區不支持大於4GB的文件,將不允許安裝。如何檢查inno安裝程序中的分區類型?
說實話,我不知道我該如何做到這一點。你是否有任何想法如何去做?也許一些執行分區類型驗證的代碼?
我會很感激任何想法執行此任務。
我有任務需要執行安裝程序,他將檢查分區類型(例如FAT32,NTFS),如果分區不支持大於4GB的文件,將不允許安裝。如何檢查inno安裝程序中的分區類型?
說實話,我不知道我該如何做到這一點。你是否有任何想法如何去做?也許一些執行分區類型驗證的代碼?
我會很感激任何想法執行此任務。
有問題的答案here。
這個簡單的例子檢查wpSelectDir
頁面上的分區類型,如果在目標分區上檢測到NTFS
,它允許進行安裝過程。
它是爲舊版本的Inno Setup的所寫的,所以需要一些改變(例如,以MsgBox
的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;
恐怕這個問題沒有答案。您可以獲取卷的文件系統,但無法獲得可以在其中存儲的文件的最大大小(至少我找不到方法;也搜索WMI)。因爲你可以使用自定義文件系統,所以這不會給你一個可靠的答案(假設你有一個普通文件系統大小的表)。 – TLama
FAT32格式允許最大文件大小爲4GB。所以這種方法應該足以檢查選擇哪種卷格式進行安裝。 Wiki關於[文件分配表](https://pl.wikipedia.org/wiki/File_Allocation_Table) – RobeN
和自定義文件系統?機會很小,但存在。在那裏你已經不熟悉所有那些已知的文件系統規範。 – TLama