有些時候我們的程式雖然能夠很好的完成安裝,但是程式的配置工作可能需要其他的一些程式來輔助完成,如果不執行這些程式,主程式就不能很好的完成工作,甚至不能完成工作,一個很明顯的例子是,目前許多程式是通過NET技術開發的,這就要求電腦上必須安裝有.net Framework,否則主程式運行不了,只有預先安裝了NET Framework後主程式才能得以運行。這個時候可以通過Run段,指定程式完成安裝後、在安裝程式顯示最終對話方塊之前要執行的程式。
設想有個主程式為ipmsg.exe,初始化程式為init.exe,主程式必須在init.exe運行一次之後方可很好的運行,這個時候可以這樣做(這裡的init.exe是我隨便找的一個檔案,和ipmsg沒有必然的聯絡,只是用來示範):
DefaultDirName="E:\TEST" AppVersion=1.0 Compression=lzma2/max ShowLanguageDialog=yes [components] Name: main; Description:"主程式(必選)";Types:full compact custom;Flags: fixed Name: data; Description:"資料檔案";Types:full Name: help;Description:"協助檔案";Types:full compact [files] ;需要打包的檔案 Source: "F:\desktop\test\ipmsg.exe"; DestDir: "{app}";Components:main Source: "F:\desktop\test\init.exe"; DestDir: "{app}";Components:main Source: "F:\desktop\test\bin.dat"; DestDir: "{app}";Components:data Source: "F:\desktop\test\help.chm"; DestDir: "{app}" ;Components:help Source: "F:\desktop\test\readme.txt"; DestDir: "{app}";components:help;Flags:isreadme [run] Filename: "{app}\INIT.EXE"; |
測試上面代碼產生的打包檔案,運行到最後出現finish之前,將會出現如下畫面,後面的安裝程式將掛起,等待run段下的程式執行完畢後方可繼續運行。
聰明的讀者可能已經想到,使用該方法也可以實現readme的功能。這裡再談談該段的各個參數:
Filename:
該參數是必須的,用於說明需要執行的檔案,或者需要開啟的檔案夾。如果Filename 不是可執行檔(.exe或.com) 或批次檔(.bat 或.cmd),你必須在條目中使用shellexec 標記,由上面的代碼可知,這個參數可以包含常量。
Description:
僅在[Run] 段有效。這是條目的描述,可以包含常量,如果沒有指明,將會使用預設的描述
Parameters:
程式的可選命令列參數,可以包含常量例如有的控制台程式需要傳遞參數,這個時候就可以使用該參數了,樣本如下:
Filename: "{app}\INIT.EXE";Description:"初始化程式";Parameters:"/t" |
注意:如果你的程式不接受參數,傳遞的參數將會被忽略。
WorkingDir
程式在哪個目錄啟動。如果這個參數未指定則使用Filename 參數中的目錄。如果Filename 不包含路徑,它將使用預設目錄。這個參數可以包含常量。
StatusMsg
僅在[Run] 段有效。由於某些程式在執行期間是不可見的(處於安全或者其他原因),但是又不想讓使用者以為安裝程式沒有響應,可以通過該參數指定程式執行時顯示在嚮導頁的訊息,如果這個參數未指定可是空白的,將使用預設的訊息“正在完成安裝...”。這個參數可以包含常量。例如下例:
[run] Filename: "{app}\INIT.EXE";Description:"初始化程式"; StatusMsg:"別急,等一下就好" |
則效果如下:
Flags:
這個參數是額外選項設定。多個選項可以使用空格隔開。支援下面的選項:
選項 |
說明 |
hidewizard |
如果指定了這個標記,嚮導將在程式運行期間隱藏 |
nowait |
如果指定了這個標記,它將在處理下一個[Run] 條目前或完成安裝前不等待進程執行完成,不能與waituntilidle 或waituntilterminated 組合使用 |
postinstall |
僅在[Run] 段有效。告訴安裝程式在安裝完成嚮導頁建立一個選擇框,使用者可以選中或不選中這個選擇框從而決定是否處理這個條目。以前這個標記調用showcheckbox。如果安裝程式已經重新啟動了使用者的電腦 (安裝了一個帶restartreplace 標記的檔案或如果[Setup] 段的AlwaysRestart 指示是yes 引起的),選擇框沒有機會出現,因此這些條目不會被處理。 |
runhidden |
如果指定了這個標記,它將在隱藏視窗中運行程式。 |
runmaximized |
如果指定了這個標記,將在已最大化的視窗運行程式或文檔 |
runminimized |
如果指定了這個標記,將在已最小化的視窗運行程式或文檔。 |
shellexec |
如果Filename 不是一個直接可執行檔(.exe 或.com 檔案),這個標記是必需的。當設定這個標記時,Filename 可以是一個檔案夾或任何登入的檔案類型,當使用shellexec 標記時,將不等待,直到產生的進程終止,如果確實需要,則必須委任標記waituntilterminated |
skipifdoesntexist |
如果這個標記在[Run] 段中指定,如果檔案名稱不存在,安裝程式不顯示錯誤訊息;如果這個標記在[UninstallRun] 段中指定,如果檔案名稱不存在,卸載程式不顯示“一些元素不能刪除”的警告 |
skipifnotsilent |
僅在[Run] 段有效。告訴安裝程式如果安裝程式未在後台運行則跳過這個條目 |
skipifsilent |
告訴安裝程式如果安裝程式在後台運行則跳過這個條目 |
unchecked |
告訴安裝程式初始為不選中選擇框。如果使用者希望處理這個條目,可以通過選取選擇框執行,如果postinstall 標記未同時指定,這個標記被忽略 |
waituntilidle |
如果指定了這個標記,它將在未輸入期間等待,直到進程等待使用者輸入,而不是等待進程終止。(調用WaitForInputIdle Win32 函數。) 不能與nowait 或waituntilterminted 組合使用 |
waituntilterminated |
如果指定這個標記,將等待到進程完全終止。注意這是一個預設動作 (也就是你不需要指定這個標記),除非你使用了shellexec 標記,在這種情況下,如果你要等待,需要指定這個標記。不能與nowait或waituntilidle 組合使用 |
轉自:http://www.360doc.com/content/13/0327/14/4221543_274247804.shtml