建立前置或後置處理指令碼
您可以在部署應用程式時建立指令碼來執行動作,然後定義該指定碼在部署階段的執行時機。 您可以利用環境變數來分隔程式碼,以便在同一個指令碼中同時包含安裝與清除程式碼。 您也可以將命令列引數傳送至指令碼中。
警告
當您編寫生產系統所使用的指令碼時,應該永遠採用無訊息模式。 那是因為等候使用者輸入動作的指令碼將會造成 BizTalk 資料庫在接收到使用者的輸入之前呈現鎖定而無法存取的狀態。
指定指令碼在部署時的執行時機
當您將指令碼當作 System.BizTalk:PreProcessingScript (前置處理指令碼) 或者 System.BizTalk:PostProcessingScript (後置處理指令碼) 新增到應用程式時,即指定了指令碼的執行時機。
前置與後置處理指令碼執行時機如下:
前置處理指令碼會在匯入或者安裝階段開始時執行。
後置處理指令碼會在匯入或者安裝階段結束時執行。
在解除安裝階段,所有的指令碼都會依據安裝時的程序順序倒退執行。 因此,後置處理指令碼會在開始解除安裝時執行,而前置處理指令碼則是在解除安裝結束時執行。
如果安裝程序失敗,所有的指令碼將會按照適當的回復動作,進行反向呼叫。
叫用之後,前置或後置處理腳本會決定 (安裝、匯入、刪除、卸載、匯入復原或安裝復原) 執行中的部署狀態,方法是檢查環境變數BTAD_ChangeRequestAction、BTAD_InstallMode和BTAD_HostClass,如 環境變數指出部署狀態中所述。 如需變數的參考資訊,請參閱 前置和後置處理腳本環境變數。
如需將腳本新增至應用程式的指示,請參閱 如何將前置或後置處理腳本新增至應用程式。
注意
如果您想要將命令列引數包含在指令碼中,必須使用 AddResource 命令來新增指令碼,本文稍後將會討論。
支援的指令碼檔案副檔名
支援的指令碼檔案副檔名如下:.com、.exe、.bat、.cmd、.vbs、.vbe、.js、.jse、.wsf 以及 .wsh。 此副檔名集合是在 PATHEXT 環境變數中定義。
記錄錯誤
您應該採用的最佳作法是,設定每個指令碼將錯誤記錄到檔案中。 這是因為 Windows Installer 無法將指令碼產生的錯誤記錄起來。 在指令碼執行完畢之後,您應該檢查這些日誌,看看是否有任何需要修正的錯誤。
為了協助您判斷錯誤發生的時間,您可以在日誌檔案中加入日期與時間欄位。
使用下列程式碼來指定日誌檔案,然後記錄一個錯誤到該日誌。
Set LogFile=<full path of log file>
…
echo %DATE% %TIME% <text> >> %LogFile%
在下列範例中,如果沒有定義公開金鑰 Token,則會在指定的日誌檔案中加入一個項目。 在日誌檔案中,資料與時間會與 "Public key should be set in script" 文字寫在同一行中。
set LogFile=C:\ScriptLog.txt
set PublicKeyToken=e5fd0ea4ecd37420
if not defined PublicKeyToken (
echo %DATE% %TIME% Public key should be set in script >> %LogFile%
您也可以將這一行 exit /b 1
新增至腳本,以產生 Windows Installer 的錯誤碼,這會導致它回復。
在下列範例中,如果沒有定義公開金鑰 Token,則指令碼會將錯誤傳回至 Windows Installer,導致 Windows Installer 進行回復動作。
set LogFile=C:\ScriptLog.txt
set PublicKeyToken=e5fd0ea4ecd37420
if not defined PublicKeyToken (
echo %DATE% %TIME% Public key should be set in script >> %LogFile%
exit /b 1
同一個指令碼中同時包含安裝與清除程式碼
因為指令碼在安裝與解除安裝階段會以完全相反的順序執行,您可以將安裝與清除程式碼納入相同指令碼中的條件陳述式裡。 例如,您可以將安裝程式碼置於用來檢查安裝模式的條件陳述式裡,如下所示:
%BTAD_ChangeRequestAction%=Update AND %BTAD_InstallMode%=Install
您可以在用來檢查安裝模式的條件陳述式中限定其清除程式碼,如下所示:
%BTAD_ChangeRequestAction%=Delete AND %BTAD_InstallMode%=Uninstall
傳送命令列引數
當您使用 BTSTask AddResource 命令將指令碼新增到應用程式時,可以指定下列參數將命令列引數傳送至指令碼中。 如果您這麼做,當叫用指令碼時,引數就會傳送至指令碼中。
/Property:Args=「argument list」
注意
如果您的應用程式中有多個前置或後置處理指令碼,則這些指令碼沒有特定的執行順序。
重要
您應該避免在指令碼中使用 BTSTask 命令 (特別是那些會在匯入時執行的指令碼),因為在同一個交易中,不同的指令碼不會被登記成匯入動作來處理。
如需使用 AddResource 命令將腳本新增至應用程式的指示,請參閱 AddResource 命令:前置處理腳本。 另請參閱 AddResource 命令:後置處理腳本