2010-07-14 51 views
1

是否有可能從C#自定義操作設置一個公共屬性(比如myProperty的)?我可以讀與Context.Parameters["MYPROPERTY"],我進入了自定義操作的數據,但有沒有一種方法來設置他們太多的屬性?在MSI自定義操作設置公共財產

謝謝。

回答

1

我不知道的方式做到這一點。在大多數情況下,這是不可能的。 Visual Studio的安裝和部署項目中設置自己的.NET自定義操作運行「延期」,這意味着它們運行MSI安裝對象已被佈置之後。 Here's the list在這種情況下可能的操作。

要驗證你的.NET自定義操作運行延遲,使用Orca打開msi文件,並轉到CustomAction表。如果InstallUtil(VS的實用程序庫放置在MSI的「二進制」表中,並且向MSI公開了一個調用.NET安裝程序集的安裝入口點的'C'入口點),則操作具有「3073」 「類型」,這意味着它們是作爲延遲執行運行(3073 msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate + msidbCustomActionTypeDll。)

如果您在DLL中的「C」自定義操作,並把它放在你的MSI它的類型「1」可以在安裝過程中執行並更改屬性。不幸的是,VS的安裝項目不支持;它可以運行每個自定義操作,據我所知。

+0

Visual Studio的安裝程序是非常有限的。您可能需要考慮轉移到WIX(Windows安裝程序XML)+ DTF(部署工具基礎版)。WIX使您能夠以比原始MSI API更加可編寫腳本/可用的方式完全控制生成的MSI,並且DTF支持更加靈活和可用的.NET自定義操作,而不是從VS setup +部署項目中獲得的操作。 – 2010-07-14 23:02:31