2012-10-31 61 views
8

我在安裝過程中必須安裝驅動程序InnoSetup。爲此我有兩個.msi 32位/ 64位的安裝文件。現在在Win7中,這個驅動程序已經包含了,所以我不需要再次安裝它。到目前爲止,我做到了這一點:在InnoSetup配置文件的[Run]段中檢查Windows版本

[Tasks]     
Name: "install_usb"; Description: "Install USB driver"; GroupDescription: "Drivers:"; 

[Files] 
Source: "xy\driver\*"; DestDir: "{tmp}" 

[Run]  
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_32bit.msi"""; StatusMsg: "Installing 32bit USB driver"; Check: not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_64bit.msi"""; StatusMsg: "Installing 64bit USB driver"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

因此,用戶可以選擇是否要安裝驅動程序。如果他選擇這樣做,則正確的驅動程序運行。這工作正常。現在我想選擇如果> = Win7運行時不安裝驅動程序。我讀到OnlyBelowVersion: 6.1但我似乎無法做這樣的事情在[Run]部分:

[Run]  
... Check: IsWin64() and OnlyBelowVersion:6.1; ... 

如何使用在[Run]部分OnlyBelowVersion(或類似的東西)?

另外,我想確保在的.msi在正常的模式(64位模式爲64位系統)上運行。因爲我認爲,現在情況並非如此。有可能強制執行嗎?我發現了約ArchitecturesInstallIn64BitMode=x64,我必須在那裏放置?

回答

10

OnlyBelowVersion參數不能在Check聲明中使用,而是作爲單獨的參數使用。

[Run]  
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_32bit.msi"""; OnlyBelowVersion: 6.1; StatusMsg: "Installing 32bit USB driver"; Check: not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_64bit.msi"""; OnlyBelowVersion: 6.1; StatusMsg: "Installing 64bit USB driver"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

要你第二個問題,IsWin64函數返回所有的Windows 64位版本的真,那麼這就是你有正確的。從參考:

此函數將始終返回True在x64版本的Windows上。

要以正確提及的64位模式運行InnoSetup安裝,您需要指定至少ArchitecturesInstallIn64BitMode指令。如果使用至少一個可用值指定此僞指令,則在具有您指定的處理器體系結構的計算機上,如果您在使用x86處理器的計算機上運行安裝程序,則您的安裝程序將在64位模式下以32位模式運行。

+0

很酷,完美的作品。對於第二個問題:是的,這在x64版本中返回true,是否也保證可執行文件和安裝程序在64位模式下運行? – brimborium

+0

哦,我以爲你只想要'driver_64bit.msi'安裝程序在64位系統上運行,而不是InnoSetup安裝程序本身。然後我會更新答案... – TLama

+0

那麼,司機是重要的一部分。但是,如果在這種情況下也不難包括安裝程序本身,那麼這是一件好事。 – brimborium