Chr*_*ney 4 registry dword wix
我已经使用WiX创建了一个安装程序,并且正在尝试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>
Run Code Online (Sandbox Code Playgroud)
然后我使用由保存的值驱动的组件设置它.
问题是,注册表搜索将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>
Run Code Online (Sandbox Code Playgroud)
有没有办法获得组件使用的实际注册表值?
这听起来是倒退的,但如果你将Type属性更改为字符串,它将起作用.当您使用ORCA查看MSI的Registry表时,原因很清楚.
当您选择整数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>
Run Code Online (Sandbox Code Playgroud)