2013-10-25 231 views
20

這是我的代碼[文件]部分至今之前運行它:創新安裝:安裝其他安裝程序,並繼續我的安裝

[Files] 
Source: "other_installer.exe"; DestDir: "{app}" 
Source: "myprogram.exe"; DestDir: "{app}" 
Source: "data.dat"; DestDir: "{app}" 
Source: "otherdata.dat"; DestDir: "{app}" 

我的程序是依賴於其他程序來運行。我已在我的安裝程序中包含此程序的安裝程序(「other_installer.exe」)。我想要做的就是在複製完成後立即啓動此安裝程序,然後繼續執行「myprogram.exe」和其他操作。

我已經使用Google搜索並在Inno Setup Help中找到了BeforeInstall的文檔,但他們沒有運行其他應用程序的示例。我相信它應該是這樣的:

[Files] 
Source: "other_installer.exe"; DestDir: "{app}" 
Source: "myprogram.exe"; DestDir: "{app}"; BeforeInstall: // RUN OTHER_INSTALLER.EXE // 
Source: "data.dat"; DestDir: "{app}" 
Source: "otherdata.dat"; DestDir: "{app}" 

回答

24

更好地爲你去可能是AfterInstall參數的方式。以下腳本將在處理OtherInstaller.exe文件條目後立即執行RunOtherInstaller功能。它會嘗試執行剛剛安裝的OtherInstaller.exe文件,如果失敗,它會向用戶報告錯誤消息。請注意,您不能中斷從功能安裝,所以沒有太多安全做你想要的東西是這樣的:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Files] 
Source: "OtherInstaller.exe"; DestDir: "{app}"; AfterInstall: RunOtherInstaller 
Source: "OtherFile.dll"; DestDir: "{app}" 

[Code] 
procedure RunOtherInstaller; 
var 
    ResultCode: Integer; 
begin 
    if not Exec(ExpandConstant('{app}\OtherInstaller.exe'), '', '', SW_SHOWNORMAL, 
    ewWaitUntilTerminated, ResultCode) 
    then 
    MsgBox('Other installer failed to run!' + #13#10 + 
     SysErrorMessage(ResultCode), mbError, MB_OK); 
end; 
+0

稍後可以存儲錯誤和中斷(並可能回滾)安裝嗎? – Septagram

0

您可以使用AfterInstall,幫助在尋找這個。 當文件剛剛被複制時,我將啓動您放置爲「AfterInstall:」的函數/過程。

在此函數/過程中,使用Exec並啓動其他安裝程序。

+0

是的,如果我的答案和你的答案類似,我很抱歉 –

8

運行必備安裝程序的另一個好時機是在PrepareToInstall事件函數中。 (請參閱基本結構提供的Inno示例腳本,並TLama對實際執行代碼。)

PrepareToInstall的主要優點是,它可以讓你處理從孩子的安裝錯誤和重新啓動請求 - 使用AfterInstall沒有。

它的主要缺點是您必須手動ExtractTemporaryFile運行孩子安裝所需的任何東西,因爲這發生在文件被提取之前。

相關問題