2017-03-02 92 views
0

我使用項目助手創建了一個InstallShield 2016專業版的Basic MSI安裝程序項目。我沒有創建任何組件/功能(只創建了deafulkt功能)。 安裝程序應首先運行控制檯應用程序(作爲安裝程序的一部分添加,但不會安裝),如果沒有錯誤,只需將WPF應用程序(DLL和.exe)複製到客戶端。使用installShield在基本MSI項目中設置可執行的運行順序

理想的步驟是,採訪對話提議後:

  1. 提示所用的,如果他/她要繼續
  2. 如果[否]關閉過程中,如果[是],顯示一個自定義對話框接受三個字段的SQL連接字符串
  3. 然後,用給定的參數作爲輸入,運行控制檯應用程序。控制檯應用程序只是運行一些SQL腳本,但它不會被安裝,它是安裝程序的一部分
  4. 經過這一步(如何檢查它已完成,沒有錯誤發生?)複製文件(wpf.exe和DLLs)在項目助理中設置。

在本文檔中,我讀了與自定義操作,可以運行可執行文件,但我無法理解或找到如何參數(除了命令行)傳遞給控制檯應用程序或得到最終狀態的詳細信息由控制檯應用程序生成。

任何人都可以建議我如何實現這些步驟?

UPDATE

InstallShield中,可以創建自定義操作中的屬性,然後調用這些值,如:在需要的地方在其他地方[屬性名]。

我能做到這一點,添加三個屬性爲可執行的命令行參數:
i=[DB_CONN_INSTANCE_NAME] u=[DB_CONN_USER_NAME] p=[DB_CONN_PWD]

+0

@Slava沒有時間來重新檢查答案,因爲你的更新。我接受了;) – Francesco

+0

很高興,它爲你工作。最好的祝福。 –

回答

1

我怎麼能檢查它完成,沒有發生任何錯誤?

您的控制檯應用程序應返回ExitCode。 0(零)表示成功,其他任何數字都將失敗。在您的自定義操作(CA)屬性中,您應爲「返回處理」屬性選擇「同步(檢查退出代碼)」。由於您希望在安裝時運行此CA,因此您應該爲「In-Script Execution」屬性選擇「延遲執行」。至少應該寫條件,因爲只有在安裝期間纔會發生這種情況,而不是在用戶將刪除產品時發生,是嗎?在這種情況下,請完成「安裝Exec條件」。如果你設置上述所有我相信此CA的MSI類型號將是1026.

在哪裏我可以找到一些更詳細的文檔?

在這裏你去:Custom Actions

編輯:

如果我測試的應用程序,我沒有得到任何暗示,控制檯應用程序運行。另外,如果可執行文件成功,我該如何指定繼續使用第二個自定義函數(應該安裝WPF應用程序)?

您需要設置「安裝Exec序列」以便在特定時間運行您的CA.延遲類型的CA必須安排在「InstallFiles」之後的某處。更多關於如何安排CA在那裏閱讀的信息:Sequencing Custom Actions。當您使用「同步(檢查退出代碼)」屬性安排控制檯應用程序CA時,安裝程​​序將等待您的CA退出並且僅在該繼續序列之後。您的第二個CA應該安排在第一個CA之後。很簡單,你肯定是在正確的軌道上。

是否可以調試基本MSI的步驟?

我不確定你在這裏問什麼。據我所知,你使用InstallShield Studio,所以運行調試並逐步完成。如果你問有關調試CA本身,你應該看看下面的資源:Debugging Custom Actions

+0

感謝您的信息。我創建了一個自定義對話框,用於將輸入參數轉換爲變量,然後使用您建議的設置(MSI類型編號1042,我不需要它在unistall上運行)作爲自定義動作可執行文件的參數。如果我測試應用程序,我沒有得到任何控制檯應用程序運行的提示。另外,如果可執行文件成功,我該如何指定繼續使用第二個自定義函數(應該安裝WPF應用程序)?是否可以調試基本MSI的步驟? – Francesco

+0

@Luca我編輯了我的答案,請看看。 –

1

您可以參考此鏈接Run custom program during installation

+0

感謝您的鏈接,它給了我一個很好的提示,從哪裏開始,但我的情況稍有不同。我無法給出設置的命令行參數(它們是SQL連接字符串的一部分),我更新了問題以反映細節。 – Francesco

+0

@Luca然後你不需要從命令行調用它們。只需創建一個Windows窗體或WPF應用程序。使用可執行文件作爲自定義操作。添加該自定義操作。該行動可處理確認信息和輸入詳細信息的表格。然後使用自定義操作應用程序,運行您想要運行的腳本。然後從其上開始安裝。 – Shahzad

+0

在我的項目中,我將WPF exe鏈接到「IS_LAUNCH_MY_PROGRAM_PLEASE」自定義操作(在項目幫助步驟中默認創建)。我添加了一個自定義對話框來獲取用戶的數據庫連接。我使用「NEW EXE」創建了一個自定義動作,並選擇了我的consoleApp.exe,在其命令行屬性中,我設置了上述屬性(如user = [IDS_USER])。我仍然想不到如何在點擊「安裝」按鈕(在ReadyToInstall對話框中)時調用此自定義操作。 – Francesco