gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:47:39 36 4
gpt4 key购买 nike

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

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

最佳答案

这听起来会倒退,但如果您将 Type 属性更改为字符串,它将起作用。当您使用 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 - 使用 WiX 的 RegistrySearch 从注册表中读取 DWORD 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444612/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com