偵錯自訂動作
您可以使用適用于 Windows的偵錯工具,針對以動態連結程式庫為基礎的自訂動作進行偵錯。 您無法根據 可執行檔 或 腳本,搭配自訂動作使用動態偵錯。
本節所述的技術可協助您偵錯 Windows Installer 自訂動作。 如需 Windows 的偵錯工具的相關資訊,請參閱 Windows 驅動程式套件 (WDK) 的驅動程式開發 工具一節。
Windows Installer 會使用 MsiBreak 環境變數來判斷要偵錯的自訂動作。 如果您有自訂動作原始程式碼的存取權,則可以在沒有 MsiBreak 的情況下使用偵錯。 若要在不使用 MsiBreak 的情況下開始偵錯,請將暫存訊息方塊放在動作程式碼的開頭。 安裝期間出現訊息方塊時,請將偵錯工具附加至擁有訊息方塊的進程。 然後,您可以設定任何必要的中斷點,並關閉訊息方塊以繼續執行。 此方法無法偵錯自訂動作的先前部分。
若要使用 MsiBreak 環境變數對自訂動作進行偵錯,請將 MsiBreak 設定為 CustomAction 資料表中的自訂動作名稱。 MsiBreak 可以是系統或使用者環境變數。 如果變數設定為系統變數,當值變更以偵測新值時,可能需要重新開機系統。
若要使用 MsiBreak 環境變數來偵錯內嵌的使用者介面,請將 MsiBreak 的值設定為 MsiEmbeddedUI。
如果使用者是系統管理員,Windows Installer 只會檢查 MsiBreak 環境變數。 如果使用者不是系統管理員,則安裝程式會忽略 MsiBreak 的值,即使這是 受控應用程式也一樣。
如果您要對執行順序中具有提升許可權的 (系統) 許可權執行的自訂動作,請將偵錯工具附加至 Windows Installer 服務。 對執行順序中具有模擬許可權執行的自訂動作進行偵錯時,系統會提示對話方塊,指出應該偵錯哪一個進程。 系統會提示使用者出現對話方塊,指出要偵錯的進程。 如需提升許可權自訂動作的詳細資訊,請參閱 自訂動作安全性。
偵錯工具附加至正確的進程之後,安裝程式會立即觸發偵錯工具中斷點,再呼叫 DLL 的進入點。 在中斷點上,您的 DLL 已載入進程和判斷的進入點位址。 如果您的自訂動作 DLL 無法載入,或自訂動作進入點不存在,則不會觸發中斷點。 因為中斷點是在呼叫 DLL 函式之前觸發,所以一旦觸發中斷點,您應該使用偵錯工具向前執行,直到呼叫您的自訂動作進入點為止。 或者,您也可以在自訂動作中的任何位置設定中斷點,並繼續正常執行。
Windows Installer 會執行 DLL,而不會直接從 DLL 位置儲存在 二進位資料表 中。 安裝程式不知道儲存在二進位資料表中的 DLL 原始名稱,並在暫存檔案名下執行 DLL 自訂動作。 暫存檔案名的格式為 MSI?????.Tmp。 在 Windows XP 上,此暫存檔案會儲存在安全的位置,通常是 < WindowFolder > \Installer。
請注意,為偵錯建立的許多 DLL 都包含對應 PDB 檔案的名稱和路徑,做為 DLL 本身的一部分。 在 PDB 儲存在 DLL 位置的系統上偵錯這種類型的 DLL 時,偵錯工具工具可能會自動載入符號。 在儲存位置找不到 PDB 的情況下,偵錯工具不支援從預存位置載入符號,或 DLL 不是使用偵錯資訊建置,您可能需要將符號檔放在具有暫存 DLL 檔案的 資料夾中。
安裝程式會將自訂動作腳本的偵錯資訊新增至安裝記錄檔。
There is a problem with this Windows Installer package. A script
required for this install to complete could not be run. Contact your
support personnel or package vendor. {Custom action [2] script error
[3], [4]: [5] Line [6], Column [7], [8] }