检查是否成功卸载

时间:2013-06-17 14:18:45

标签: c# .net wix multiple-instances msiexec

我正在尝试自动执行一个安装过程,在该过程中我卸载了以前的版本并在顶部安装了较新的版本。如果卸载成功,我应该如何测试(在我的引导程序中,用C#编码)?

目前我正在启动卸载。

Process p = Process.Start("msiexec", /*various switches*/);
p.WaitForExit();

我目前也正在与动态多个实例纠缠在一起,这真的让我大吃一惊,所以在WiX中处理这个问题本身很难,如果不是不可能的话。

2 个答案:

答案 0 :(得分:2)

作为在引导程序中处理此问题的替代方法,并假设较新版本的安装程序是正在开发的Windows Installer程序包(.msi),您可以使用Windows Installer功能在需要时卸载旧版本。执行此操作时,升级可以是以下之一:

主要升级基本上是删除旧版本和安装新版本。 WiX允许您在安装项目quite easily中创作其中任何一个。

因此,您的引导程序只需要安装较新版本,让Windows Installer完成剩下的工作。


BTW-您可能希望使用WiX Bootstrapper而不是编写自己的逻辑。如果您愿意,可以在.NET中为WiX Bootstrapper编写自定义UI,如果这是您编写自己的引导程序的原因。

答案 1 :(得分:2)

您可以使用Windows Installer API,而不是通过msiexec调用Windows Installer。您可以通过P / Invoke,激活COM接口或通过WiX的DTF包装器库来实现。用于删除产品的具体功能是MsiConfigureProductEx

使用DTF,你可以这样做:

Installer.SetInternalUI(InstallUIOptions.Silent);
Installer.SetExternalUI(UiHandler, InstallLogModes.Verbose);
Installer.EnableLog(InstallLogModes.None, null);
Installer.ConfigureProduct(productCode, 0, InstallState.Removed, "");
Console.WriteLine("RebootRequired: {0}   RebootInitiated: {1}", Installer.RebootRequired, Installer.RebootInitiated);

UiHandler委托允许该应用监控进度。如果有错误,DTF会抛出异常。