2012-07-10 231 views
6

我正在使用Inno安裝程序爲我的應用程序創建安裝程序。安裝程序是非常基本的,只是複製一些文件。這工作得很好,我很高興。安裝期間Inno Setup啓動可執行文件(安裝驅動程序)

我最近實現了USB支持,需要從IVI基礎安裝USB驅動程序。它基本上是一個exe文件,必須在安裝過程中的某個地方啓動。到目前爲止,用戶必須單獨安裝驅動程序,這並不那麼優雅。我的第一個方法是這樣的:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: postinstall skipifsilent 

這可以工作,但用戶必須選擇正確的位數。這樣做的好處是他可以選擇不安裝它(在這種情況下,應用程序只是忽略了USB功能)。我真正想要的是自動檢測系統的位數並運行設置過程。這並不一定要在[Run]部分,儘管我沒有任何反對的東西(因爲用戶可以選擇不安裝它)。

我也發現了一些代碼,並試圖像這樣運行:

[Code] 
procedure CurStepChanged (CurStep: TSetupStep); 
var 
    WorkingDir: String; 
    ReturnCode: Integer; 
begin  
    if (ssInstall = CurStep) then 
    Log('Starting driver installation'); 
    WorkingDir := ExpandConstant ('{app}\driver'); 
    Exec ('IviSharedComponents_2.2.1.exe', '', WorkingDir, SW_SHOW, ewWaitUntilTerminated, ReturnCode); 
end; 

但這並不開始安裝(雖然我可以看到日誌條目「開始安裝驅動程序」)。我的路線有問題嗎?我在做什麼錯了,我怎麼能改變這個腳本來自動選擇正確的可執行文件,具體取決於位數?

編輯:我用建議的解決方案與[Tasks]條目。實現看起來像這樣(僅供參考):

[Tasks] 
Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:"; 

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

這很有效,非常感謝您的幫助!

回答

8

在這種情況下,這是最好的所以它運行無條件地刪除安裝後旗在安裝過程結束時(但在此之前它說完成),並添加一個Check:參數,將其限制在正確的位數:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent 

如果您希望這是有條件的,您可以使用正常的[Tasks]條目,該條目會在安裝程序開始前提示。

+0

非常好,非常感謝,這正是我想要的! :) – brimborium 2012-07-10 16:48:00

+1

我還在我的問題底部添加了我的最終解決方案(使用'[Tasks]'條目)。 – brimborium 2012-07-11 17:11:38

+0

Thx,確實是錯字。 ;) – brimborium 2012-07-12 09:32:54

相關問題