我正在尝试通过 *.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<>""" 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"
我的期望是一个无故障的卸载过程,但我不知道为什么它不起作用。
通常,我们绝不希望启动条件干扰修复、更改或卸载。为了实现这一目标,我们将
or Installed
添加到所有条件中,以便它们始终评估为 true。
举个例子....NET Framework 或类似的先决条件。我们希望它阻止安装,但如果有人删除它,我们不希望它阻止应用程序删除。