4

我正在尝试创建快捷方式来卸载引导程序已安装的任何内容。因此,我只想在添加和删除程序时执行与卸载相同的操作。

我发现 de bootstrapper 安装在 package cache{guid}[bootstrappername].exe

它安装的其中一个 msi 软件包还安装了此引导程序 /uninstall 调用的快捷方式。但是问题是包的 GUID 在每次构建时都会重新生成。所以我有些如何将其设置为 msi 属性。但我无法弄清楚如何做到这一点,在我看来,GUID 在构建过程中是未知的,但只有在构建完成后才知道?

还有另一种方法来确定缓存引导程序的位置吗?

4

2 回答 2

1

如果您使用托管 BA,您可以尝试以下操作:

在与 MsiPackage 链接的 Bundle.wxs 中,添加 MsiProperty,如:

<MsiPackage SourceFile="Setup.msi"> <MsiProperty Name="UNINSTALLER_PATH" Value="[UNINSTALLER_PATH]"/> </MsiPackage>

在代码中的某处(在调用安装操作之前),您需要为此变量设置值,如下所示: Engine.StringVariables["UNINSTALLER_PATH"] = string.Format(@"{0}\{1}\{2}\{3}.exe", Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Package Cache", Engine.StringVariables["WixBundleProviderKey"], ProductName);

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) – %systemdir%:\ProgramData 的路径

Package Cache- 安装包缓存的 ProgramData 中的文件夹名称

Engine.StringVariables["WixBundleProviderKey"] – 缓存包创建的文件夹名称 (guid)

ProductName – 引导程序“exe”的名称</p>

最后,在您的 Product.wxs 中,您可以创建快捷方式,但在“Target”属性中,您需要传递 UNINSTALLER_PATH 值和“Arguments”设置 =“/uninstall”:

<Shortcut Id="Shortcut1" Name="Uninstall" Description="Uninstall" Target="[UNINSTALLER_PATH]" Arguments="/uninstall" WorkingDirectory="Programmenufolder" />

对不起我的英语不好 :)

于 2013-11-07T10:20:18.007 回答
-1

您可以使用您在 bundle.wxs 中定义的包升级代码来确定位置。

使用注册表路径到您的捆绑包的 Windows 卸载位置

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{你的包的升级代码}

或 64 位操作系统

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall{你的包的升级代码}

BundleCachePath包含完整路径,包括您的 bootstrapper.exe 文件名到缓存包的包缓存。

您还可以使用包含完全安静卸载命令或UninstallString的值QuietUninstallString以非安静模式启动卸载。

于 2013-05-23T19:06:47.680 回答