2015-09-15 15 views
1

我有一個產品需要安裝到多個驅動器和目錄,其中一些可以自定義。所以我正在研究InstallShield Basic MSI項目在運行時如何更改目錄。我看到DestinationFolderInstallChangeFolder對話框一起工作,使用按InstallChangeFolderOK按鈕上的SetTargetPath事件更改INSTALLDIR目錄。InstallShield Basic MSI中的SetTargetPath事件如何工作?

我不明白的是爲什麼SetTagetPath只有一個參數。除了安裝句柄之外,MsiSetTargetPath函數還有2個參數,所以我不明白爲什麼SetTargetPath事件只需要1個。我想設置指定的目錄變量來引用指定的目錄。這需要兩個參數。他們如何只通過一個參數就可以實現?

我已經讀了3次documentation on SetTargetPath,但它仍然沒有意義。

回答

1

看起來,SetTargetPath的目的是將屬性中的更新值傳輸到相同名稱的目錄變量,對舊的和新的值(分別在目錄變量和屬性值中)分別執行一些驗證處理。因此,似乎將新值轉換爲目錄變量需要兩步:

  1. 將相同名稱的屬性設置爲新值。
  2. 致電SetTargetPath提供屬性名稱以將teh屬性的值複製到目錄中。

在此過程中,請注意,如果提供的屬性爲括號,則需要引用其他屬性名稱。因此,如果要複製到目錄變量的值直接在屬性中,請勿使用括號。

+0

我發現改變INSTALLDIR的唯一方法是將其引用到另一個屬性,然後針對該屬性調用SetTargetPath。只需將該值設置爲另一個字符串即可在對話框中使用,但在進入文件安裝位置後無法使用。 – RickWeb

0

您想研究「文件成本計算」(成本初始化,成本最終確定)。在進行成本計算之前,您可以使用Type 51 Set Property自定義操作。成本計算後,您必須使用Type 35 Set Directory自定義操作。這是因爲需要重新計算成本。

我注意到你有很多MSI問題。你可能想拿起一本書,比如Phil Wilson的Windows Installer權威指南。這和導師是最好的信息來源,因爲這方面的培訓很少。

+0

這就是我學習的方法:用一種幾乎不熟悉的技術跳到一個新項目中,這樣我就開始了,然後把它全部喝完,直到水流在我的膝蓋周圍:)。我想我現在已經把它降到了胸部的水平。在SO和Google的幫助下,我學到了很多東西。我想,比用書更快。到目前爲止,我最顯着的成就是爲每個實例更新InstallShield的MSI轉換程序,並替換所有組件GUID。似乎使多實例安裝非常乾淨地工作,而不必重複10次。 – BlueMonkMN

+0

有關SetTargetPath的答案是否顯示對正在發生的事情有很好的理解?我既設置屬性,又在Cost Finalize之後爲這些屬性調用'SetTargetPath',因爲我認爲這就是我看到的標準Change Destination對話框所做的。它似乎表現良好,日誌看起來不錯。 – BlueMonkMN

相關問題