我创建了wix bootsrapper应用程序,该应用程序安装了2个msi并运行1个exe文件。每当我运行它时,它就会出现在控制面板中(重复)。但是,当我要从控制面板中删除时,它只是在运行而不是卸载。
我的bootsraperr代码是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<?define LibsDir="..\Shared\Lib\" ?>
<Bundle Name="Product Setup" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="{32FC4B59-99BE-4617-867C-4620E2E5772F}">
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
<Payload SourceFile="BootstrapperCore.config" />
<Payload SourceFile="$(var.LibsDir)WixWPF.dll" />
<Payload SourceFile="$(var.LibsDir)WixWPF.pdb" />
<Payload SourceFile="msi\p1.msi" />
<Payload SourceFile="msi\p2.msi" />
<Payload SourceFile=".../.exe" />
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="NetFx40Web" />
<MsiPackage Id="Product1" SourceFile="msi\p2.msi" InstallCondition="InstallP=1" />
<MsiPackage Id="Product2" SourceFile="msi\P1.msi" />
<ExePackage Id="Product3" SourceFile="p2.exe" />
</Chain>
</Bundle>
</Wix>
我想从控制面板中将其卸载。我该如何处理?
引导程序可以通过GUID,UpgradeCode和Version进行标识。您无法设置引导程序的GUID,它会在每次重建后随机生成一个新的引导程序。因此,如果重建引导程序,则将获得两个具有相同的[[UpgradeCode和Version,但具有不同的[[GUID]]的引导程序,并且它们将作为两种不同的产品安装。要从控制面板卸载旧的引导程序,需要正确缓存它的setup.exe,并使用正确配置的卸载选项。如果您有问题,请执行以下操作:
找到要卸载的引导程序的GUID。最好的方法是在%temp%目录中找到安装日志文件并找到以下行:
如果没有日志文件,请转到参数2
在以下注册表项中查找和删除引导程序的提及。最好的方法是通过GUID进行此操作,但是您也可以使用引导程序的DisplayName。注意:如果使用DisplayName,则可以将两个安装程序的引导程序混合使用。
SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall软件\ Microsoft \ Windows \ CurrentVersion \卸载
((后两个中的一个取决于您的MSI的InstallScope。如果所有它们都是基于计算机的,则捆绑包将位于HKLM中。)
如果引导程序已缓存,则还需要清除缓存。
为了避免将来重复,您可以有几种选择:
在安装以前的版本之前,请勿重建引导程序。或为每个版本进行备份。