我正在使用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
這很有效,非常感謝您的幫助!
非常好,非常感謝,這正是我想要的! :) – brimborium 2012-07-10 16:48:00
我還在我的問題底部添加了我的最終解決方案(使用'[Tasks]'條目)。 – brimborium 2012-07-11 17:11:38
Thx,確實是錯字。 ;) – brimborium 2012-07-12 09:32:54