2012-03-22 91 views
2

作爲基於WiX的安裝的一部分,我需要請求用戶輸入屬性JAVA_LOC的值,我將把它存儲爲註冊表值(它不是我想要創建的目錄)但是,如果我使用Publish Event =「SetTargetPath」,則鏈接器說我必須將JAVA_LOC聲明爲組件層次結構中的一個目錄。如果我這樣做,我可以記錄路徑的事情沒關係。但是,事實證明,如果之後運行「更改」安裝,則將忽略新路徑值,並將JAVA_LOC重置爲我強制創建的JAVA_LOC目錄的位置。WiX - 驗證不是安裝目錄的路徑?

如何驗證用戶輸入的路徑不適用於安裝 目錄?請記住,我只是試圖將它存儲在註冊表中,而不是真的爲它創建一個目錄。

戴夫

回答

3

的SetTargetPath控制事件只能採取從目錄表作爲自變量的主鍵。你將不得不定義目錄才能使用它。沒有任何說Dirctory必須有CreateFolder條目和/或任何文件資源。我認爲你可以在你的組件中嵌入這個目錄下的註冊表數據,它應該都可以在不創建目錄的情況下工作。

+0

謝謝,克里斯托弗。這很好。是的,該目錄沒有創建。問題是最後一部分:我在第一次安裝時正確地將JAVA_LOC值存入註冊表中。如果我在下一步執行「更改」安裝並更改UI值,那麼在執行日誌中看到我的新值將被忽略時,將將JAVA_LOC設置爲目錄樹loc並在執行期間進入註冊表。目錄聲明沒有「安全」。任何想法如何讓它不忽略這裏的JAVA_LOC屬性? – 2012-03-22 19:31:46

+0

啊。目錄屬性不需要標記爲安全,這是自動的。問題是因爲你沒有創建目錄並安裝任何東西,MSI不會記住目錄的位置。如果安裝了某些東西,它只會變得粘稠(不可變)。除了在ControlEvent上進行中繼(修復期間用戶界面不會觸發),您需要在CostInitialize之前使用Type51 CA,或者在安裝CostFinalize之後使用Type35 CA來獲取您需要的值的JAVA_LOC目錄屬性,而不是默認創作的值。 y – 2012-03-22 19:38:35

+0

您還需要將註冊表中的值讀回到屬性中作爲CA的輸入。有關更多詳細信息,請參閱以下內容:http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern – 2012-03-22 19:39:53