wix - WiX:如果注册表项不存在,则设置它,并防止在重大升级时将其删除
问题描述
我的目标是在全新安装或升级时设置注册表项值(如果它尚不存在)。为此,我从注册表搜索中定义了一个属性,并向我的组件添加了一个条件:
<Property Id="AN_ID_HERE">
<RegistrySearch Id="anIdHere"
Root="HKCU"
Key="Path\To\Key"
Name="Value"
Type="raw"/>
</Property>
<Fragment>
<Component Id="MyComponentId" Guid="xxx">
<Condition>
<![CDATA[(NOT AN_ID_HERE)]]>
</Condition>
<RegistryKey Root="HKCU" Key="Path\To\Key">
<RegistryValue Type="integer" Name="Value" Value="1" KeyPath="yes"/>
</RegistryKey>
</Component>
</Fragment>
这导致密钥被删除而不是被重大升级替换,大概是因为AN_ID_HERE
它在评估时具有一些价值(在删除注册表项之前)。我还尝试添加NOT UPGRADINGPRODUCTCODE
条件以防止密钥被删除,但这没有任何效果。
我尝试了一个我看到的称为“记住属性模式”的解决方案:http ://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern/ 。我对这种方法的问题是,RegistrySearch
它将读取值为 1 的 REG_DWORD 作为“#1”,因此新的注册表值将设置为 REG_SZ,这对我的目的不起作用。
解决方案
推荐阅读
- javascript - 将 Animate.CSS 与 Reveal.JS 集成
- javascript - 如何使用 watir 访问以下元素。我总是出错
- kubernetes - 为单个请求运行“kubectl proxy”
- c# - 仅当更新行不为空时才获取更新行的输出?
- python - 使用 Python 将 txt 文件导入 CSV(1 列中的所有数据)
- reverse-engineering - 有没有办法在 IDA 伪代码视图中显示十六进制表示而不是十进制?
- sql - 如何在 SELECT 语句中重用子查询的结果
- c# - SQL Server / EF:跟踪人员的预期出勤率
- javascript - SharePoint 2013 JSLink OnPostRender 在添加 SP.SOD.executeFunc 后不起作用
- xslt - 寻找 Domino XSL 帮助尝试查找颜色设置为蓝色的字段