2011-05-13 146 views
7

目前我已經定製了Wix_InstallDirDlg以使用戶能夠在安裝時設置註冊表項。在InstallDirDlg和MaintenanceTypeDlg後面都會顯示一個自定義對話框,以便它可以同時滿足安裝和修復情況。Wix安裝程序在修復時清空註冊表設置

自定義對話框有一個鏈接到屬性的單個文本框。此屬性具有註冊表搜索功能,因此如果用戶修復或升級,則先前的值將保留下來,並顯示在自定義對話框中以供用戶驗證。該對話框在安裝時工作正常,並且創建了註冊表項。但是,在修復時,自定義對話框顯示輸入正確的註冊表值(因此RegistrySearch正在運行),但修復完成後,鍵值爲空。

<Property Id='SERVER_LISTEN_URL'> 
      <RegistrySearch Id='ServerListenUrlRegSearch' Root='HKLM' 
          Key='SOFTWARE\$(var.Manufacturer)\$(var.Name)' 
          Name='ServerListenUrl' 
          Type='raw' Win64='no' /> 
     </Property> 

<Component Id="RegistryEntries" Guid="0234974B-6158-4312-90A7-56869809B42E"> 
     <RegistryKey Id="ServerRegKey" 
       Root="HKLM" 
       Key='SOFTWARE\$(var.Manufacturer)\$(var.Name)' 
       Action='createAndRemoveOnUninstall'> 
      <RegistryValue Id="ServerListenUrlRegVal" 
         Name='ServerListenUrl' 
         Value='[SERVER_LISTEN_URL]' 
         KeyPath='yes' 
         Type='string' /> 
     </RegistryKey> 
</Component> 

<Dialog Id="SettingsDlg"> 
    <Control Id="ListenUrl" Type="Edit" X="20" Y="100" Width="320" Height="18" Property="SERVER_LISTEN_URL" Indirect="no" /> 
</Dialog> 

我做了什麼錯了?

回答

7

我在貼出來之後直接解決了這個問題。我花了將近一天的時間試圖解決這個問題,所以希望這可以節省一些痛苦。您只需將該屬性更改爲安全屬性即可。

<Property Id='SERVER_LISTEN_URL' Secure='yes'> 
     <RegistrySearch Id='ServerListenUrlRegSearch' Root='HKLM' 
         Key='SOFTWARE\$(var.Manufacturer)\$(var.Name)' 
         Name='ServerListenUrl' 
         Type='raw' Win64='no' /> 
</Property> 
3

安全屬性可以在一個「升高安裝」通過其從所述客戶端進程向服務器進程(在系統環境中運行)的含量(在用戶上下文運行)。換句話說,由非管理員用戶調用的安裝。不要過於慷慨地提供哪些屬性是安全的,但必須添加升級表中使用的所有屬性,以及在GUI中使用的任何特殊屬性,以獲取關鍵信息,就像您所做的那樣。

http://msdn.microsoft.com/en-us/library/aa371571(v=vs.85).aspx

+0

感謝您的澄清,它現在是有道理的,爲什麼它沒有工作。 Wix編譯器(或Orca)無法檢測到我正在使用應該需要安全的屬性,這真是令人遺憾! – 2011-05-15 08:45:51

+0

我同意穴居人。在Windows安裝程序中有很多陷阱。 Wix實際上確實幫助你多一點,但仍有改進的餘地。 – 2011-05-15 14:39:23

相關問題