4
我已經使用WiX創建了一個安裝程序,並且在修復安裝我的產品期間試圖保留現有的DWORD
註冊表項。爲了存儲現有的值,我使用了下面的WiX片段;使用WiX的RegistrySearch從註冊表中讀取DWORD值
<Property Id="PreserveMySetting" Secure="yes">
<RegistrySearch Id="FindExistingMySetting"
Root="HKLM"
Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
Name="MySetting"
Type="raw"
Win64="no" />
</Property>
然後我使用由保存的值驅動的組件進行設置。
問題是,註冊表搜索以「格式化」字符串的形式返回DWORD,例如: #而不只是
這意味着,當我的組件設置註冊表項,它是作爲一個創建REG_SZ
與值「#1」,即使你呃我已經表示它應該是一個整數;
<Component Id="MySettingKey"
Guid="{76C4B14C-14BC-42E1-91F0-75C9F2A20EC8}">
<RegistryValue Id="MySetting"
Action="write"
Name="MySetting"
Value="[PreserveMySetting]"
Type="integer"
KeyPath="yes"
Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
Root="HKMU"/>
</Component>
是否有任何方法可以獲取組件使用的實際註冊表值?
嗨克里斯托弗,感謝您的答覆。我測試了你推薦的內容,事實上,如果密鑰已經存在,那麼保存的值將按照預期設置。但是,我注意到這樣做的效果是在作爲REG_SZ進行乾淨安裝時創建密鑰,這顯然不希望發生。有沒有解決的辦法?用DWORD創建初始密鑰的一些方法,但是然後運行一個單獨的組件來使用保存的值來填充它? –
如果該屬性尚未具有值,則可以擁有一個SetProperty自定義操作,該操作將該屬性設置爲#1。這應該可以幫助您僅使用1個組件來啓動泵。 –
啊我的情況有點複雜,因爲有問題的註冊表項是可以從命令行指定的,但在用戶離開它時有一個默認值。我會嘗試在這裏嘗試一些不同的配置,看看哪個產生了正確的結果,但感謝指針。 –