2013-02-19 122 views
1

我正在玩MSI安裝,用於我正在處理的大型項目,並且很想知道更多關於我看到的這些屬性的信息。MSI安裝程序數據屬性

他們是像[TARGETDIR]或任何包裹在「[PROPERTNAMEHERE]」中的東西。我試圖找出他們是否是這些地方的清單?

在附註中,是否有從自定義操作訪問所有這些屬性的方法。我查看了Context.Parameters集合,但沒有看到任何內容。我一直將/ name =「[TARGETDIR] \」作爲CustomActionData傳遞給一個定製,但這還不夠。

感謝

史蒂夫

+0

你用什麼技術來構建你的MSI? – 2013-02-19 14:36:53

回答

0

如果您正在使用WIX ...

先回答你的側面說明 - 你可以從一個自定義操作中訪問自定義值(我假設你知道如何建立一個自定義操作... ) - 看看你的會話對象(自定義操作的參數) - 它有一個CustomActionData,它有一個索引器。通過指定

session.CustomActionData["INSTALLLOCATION"] 

指定要擺脫它的屬性的名稱你需要的屬性添加到您的自定義操作,然後才能但訪問它 - 而要做到這一點,你需要告訴威克斯設置這件事......

<CustomAction Id="UNIQUEID" Return="check" Property="YourCustomActionNameInWix" Value="INSTALLLOCATION=[INSTALLLOCATION]" /> 

爲了回答您的其他問題 - 不,我不認爲你可以在代碼中的這些值我一直有腳本他們。

HTH

+0

我不使用WIX,但也許我應該。不用擔心,不過謝謝。 – 2013-02-20 08:26:13

0

Properties與基於MSI軟件包工作時,要了解非常重要。首先你應該知道有兩種屬性,public propertiesprivate properties。處理自定義操作時,應始終使用公共屬性,以避免在安裝過程從InstallUI Sequence傳遞到InstallExecute Sequence時重置值。

另外,非常重要,自定義操作在運行延遲時無法獲取/設置屬性。只有即時的,即未推遲的,custom actions可以獲取/設置屬性值。

有一個例外,運行延遲自定義操作時,可以從名爲「CustomActionData」的特殊屬性中獲取值。

現在,在自定義操作方面,您可以在安裝過程中編寫C++,C#或VBScript自定義操作來獲取/設置屬性。

VBScript is not recommended for an official application release,但是您可以將它用於需要快速使用的內容。

對於C++ custom actions您將獲得一個DLL,您可以從中導出一個或多個方法,以在您的自定義操作被觸發時進行調用。請注意,函數簽名與標準DLL不同,請仔細分析鏈接的示例。

如果更方便,你也可以得到一個類似的DLL writing C# code

確保您沒有嘗試run a standard DLL as a custom action,有些commercial/free setup authoring tools支持,但非全部,這一點非常重要。如果您打算編寫一個DLL自定義操作,最好從一開始就使用上面鏈接的兩個樣本(C++/C#)之一來完成。