windows - 如何使 Windows 安装程序更新注册表字符串值(不是多字符串)中的列表?

标签 windows list wix installation registry

我需要制作一个安装程序,该安装程序必须更改另一个应用程序(第三方)的注册表。 另一个应用程序有一个 REG_SZ(纯字符串,而不是多字符串),其中包含以逗号分隔的值列表。我的值必须附加到该列表中(并在卸载时删除)。

ListToUpdate (REG_SZ) = "val1, val2, val3, myval"

Windows Installer 是否有任何内置工具可以执行此操作?如果是这样,(我实际上不相信这一点),如何通过wix使用它?

如果没有,wix 本身是否有任何扩展可以创建一些自定义操作来为我们做到这一点?或者我必须实现自己的?

最佳答案

您可以读取注册表并获取属性的值。然后使用旧值和新值写入同一注册表。这是如何做到的。

读取旧值

<Property Id="OLDVALUE">
    <RegistrySearch Id="TestReg"
                    Root="HKLM"
                    Key="Software\TestKey\TestKey2"
                    Name="Test"
                    Type="raw" />
</Property>

写回注册表

<Component Guid="A7C42303-1D77-4C70-8D5C-0FD0F9158EC4" Id="REGComponent" Directory="TEST">
      <RegistryKey Root="HKLM"
                 Key="Software\TestKey\TestKey2">
        <RegistryValue Name="Test"
                       Action="write"
                       Value="[OLDVALUE], MyVal"
                       Type="string"
                       KeyPath="yes" />
      </RegistryKey>
      </Component>

如果您想在卸载时删除您的值,您可以编写自定义操作来执行此操作。还要确保 msi 应在管理员模式下运行,否则注册表将不会被修改。

关于windows - 如何使 Windows 安装程序更新注册表字符串值(不是多字符串)中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26790609/

相关文章:

c++ - libm.lib、libmmt.lib 和 libmmds.lib 之间有什么区别?

c# - 在 List<T> 中查找 IEnumerable<T> 时,GetGenericTypeDefinition 返回 false

.net - 使用 LINQ 从数据集中选择行,其中 RowsID 的列表位于 List<T>

c# - WiX 3.5.2030.0 CreateDatabase 使用 DTF 外部 UI 处理程序失败并显示 1603,在没有外部 UI 处理程序的情况下工作

Windows 相当于 Unix "find"命令?

windows - 环境变量 'ORACLE_UNQNAME' 的 Oracle 问题

wix - 在 WIX 命令行中指定 InstallPrivileges 是受到限制还是提升的最佳方法是什么?

Wix 安装程序包产生损坏的 "msi"

Esky 的 Python 项目结构

c - 哈希表覆盖