使用Wix&;的RegistrySearch从注册表读取DWORD值 [英] Reading DWORD values from registry using WiX's RegistrySearch
本文介绍了使用Wix&;的RegistrySearch从注册表读取DWORD值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
DWORD
注册表项。为了存储现有值,我使用了以下WiX片段;
<Property Id="PreserveMySetting" Secure="yes">
<RegistrySearch Id="FindExistingMySetting"
Root="HKLM"
Key="Software!(loc.ProductManufacturer)!(loc.ProductName)"
Name="MySetting"
Type="raw"
Win64="no" />
</Property>
稍后,我使用由保存值驱动的组件对其进行设置。
问题是,注册表搜索以"格式化"字符串的形式返回DWORD,例如;
#1
而不仅仅是
%1
这意味着当我的组件设置注册表项时,它被创建为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>
是否有办法获取组件使用的实际注册表值?
推荐答案
这听起来会倒过来,但如果您将类型属性更改为字符串,它就会起作用。当您使用ORCA查看MSI的注册表时,原因就很清楚了。
当您选择整数Wix作者的"#[PRESERVEMYSETTING]"时,当您选择字符串时,它是作者的[PRESERVEMYSETTING]。由于PRESERVEMYSETTING已经是#1,因此您希望它是#1而不是##1。<Component Id="MySettingKey"
Guid="{76C4B14C-14BC-42E1-91F0-75C9F2A20EC8}">
<RegistryValue Id="MySetting"
Action="write"
Name="MySetting"
Value="[PRESERVEMYSETTING]" <!-- Secure Properties are PUBLIC properties -->
Type="string"
KeyPath="yes"
Key="Software!(loc.ProductManufacturer)!(loc.ProductName)"
Root="HKMU"/>
</Component>
这篇关于使用Wix&;的RegistrySearch从注册表读取DWORD值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文