使用注册表搜索/条件卸载 WiX 工具集

问题描述 投票:0回答:1

我正在尝试通过 *.msi 文件卸载应用程序。 *.msi 文件是由我的 WixToolset-Project 生成的。

我的问题是卸载过程因RegistrySearch 元素和Launch 元素而失败。启动条件将被评估为 true 并中断卸载过程。 启动条件本身会检查是否安装了所需的密钥。 所需的密钥已安装。否则将无法安装该应用程序。 从日志中我可以看到注册表搜索元素正确读取了该密钥。

到目前为止我的代码:

具有启动和注册表搜索条件的Package.wxs

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
     xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
  <Package Name="RegistryKeyWix" Manufacturer="TODO Manufacturer" Version="1.0.0.0" UpgradeCode="[GUID]">
    <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />

      <Property Id="REGISTRYKEYPROP" >
          <RegistrySearch Id="RegistryKeySearch" Key="SOFTWARE\Test\Testkey" Name="pc" Type="raw" Root="HKLM" Bitness="always64"/>
      </Property>

      <Launch Condition="REGISTRYKEYPROP&lt;&gt;&quot;&quot;" Message="Required key not installed"/>
      
    <Feature Id="Main">
      <ComponentGroupRef Id="ExampleComponents" />
    </Feature>

      <ui:WixUI Id="WixUI_Minimal"/>
  </Package>
</Wix>  

WiX 模板中的示例组件

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
    <Fragment>
        <ComponentGroup Id="ExampleComponents" Directory="INSTALLFOLDER">
            <Component>
                <File Source="ExampleComponents.wxs" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

WiX模板生成的Folder.wxs

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
  <Fragment>
    <StandardDirectory Id="ProgramFiles6432Folder">
      <Directory Id="INSTALLFOLDER" Name="!(bind.Property.Manufacturer) !(bind.Property.ProductName)" />
    </StandardDirectory>
  </Fragment>
</Wix>

以及用于密钥安装的*.reg文件:


[HKEY_LOCAL_MACHINE\SOFTWARE\Test\Testkey]
"pc"="571E721F-2F6C-4604-9898-1FD2B5FE9BF6"

我的期望是一个无故障的卸载过程,但我不知道为什么它不起作用。

wix windows-installer registry wix4 heatwave
1个回答
0
投票

通常,我们绝不希望启动条件干扰修复、更改或卸载。为了实现这一目标,我们将

or Installed
添加到所有条件中,以便它们始终评估为 true。

举个例子....NET Framework 或类似的先决条件。我们希望它阻止安装,但如果有人删除它,我们不希望它阻止应用程序删除。

© www.soinside.com 2019 - 2024. All rights reserved.