使用Wix&的RegistrySearch从注册表读取DWORD值 [英] Reading DWORD values from registry using WiX's RegistrySearch

查看:9
本文介绍了使用Wix&的RegistrySearch从注册表读取DWORD值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已使用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>

稍后,我使用由保存值驱动的组件对其进行设置。

问题是,注册表搜索以"格式化"字符串的形式返回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&amp;的RegistrySearch从注册表读取DWORD值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆