6

DWORD我已经使用 WiX 创建了一个安装程序,并试图在我的产品修复安装期间保留现有的注册表项。为了存储现有值,我使用了以下 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>

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

4

1 回答 1

8

这听起来会倒退,但是如果您将 Type 属性更改为 string 它将起作用。当您使用 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>
于 2013-01-21T19:43:50.883 回答