WiX:设置注册表项(如果不存在),并防止其通过重大升级而被删除

时间:2019-02-13 14:34:52

标签: wix windows-installer registry

我的目标是在全新安装或升级(如果尚不存在)上设置注册表项值。为此,我定义了一个属性,并通过注册表搜索为我的组件添加了条件:

    <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,这对我而言不起作用。

0 个答案:

没有答案