使用WiX的RegistrySearch从注册表中读取DWORD值

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)

有没有办法获得组件使用的实际注册表值?

Chr*_*ter 6

这听起来是倒退的,但如果你将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)