2015-08-18 65 views
3

我有任務需要執行安裝程序,他將檢查分區類型(例如FAT32,NTFS),如果分區不支持大於4GB的文件,將不允許安裝。如何檢查inno安裝程序中的分區類型?

說實話,我不知道我該如何做到這一點。你是否有任何想法如何去做?也許一些執行分區類型驗證的代碼?

我會很感激任何想法執行此任務。

回答

4

有問題的答案here

這個簡單的例子檢查wpSelectDir頁面上的分區類型,如果在目標分區上檢測到NTFS,它允許進行安裝過程。

它是爲舊版本的Inno Setup的所寫的,所以需要一些改變(例如,以MsgBoxFormat2) 如果您正在使用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; 
+0

恐怕這個問題沒有答案。您可以獲取卷的文件系統,但無法獲得可以在其中存儲的文件的最大大小(至少我找不到方法;也搜索WMI)。因爲你可以使用自定義文件系統,所以這不會給你一個可靠的答案(假設你有一個普通文件系統大小的表)。 – TLama

+0

FAT32格式允許最大文件大小爲4GB。所以這種方法應該足以檢查選擇哪種卷格式進行安裝。 Wiki關於[文件分配表](https://pl.wikipedia.org/wiki/File_Allocation_Table) – RobeN

+0

和自定義文件系統?機會很小,但存在。在那裏你已經不熟悉所有那些已知的文件系統規範。 – TLama

相關問題