安装并加载新版本后,安装程序不会退出

Installer does not exit once new version is installed and loaded

我的 C# 应用程序有一个 Visual Studio 安装程序项目。它已设置为卸载我的应用程序的任何以前版本,安装新版本,然后 运行 安装应用程序后。它按预期工作,直到它位于最后的 'Please Wait' 阶段:

至此,我的应用程序的新版本已经安装完毕,并且 运行 非常高兴,但是上面的屏幕截图就在那里(完全响应)并且只会移动到 "Installation Complete" window 一旦我手动关闭了新安装的应用程序版本。

我的安装程序项目配置有问题吗?我不希望人们必须关闭应用程序才能完成安装过程,然后才不得不再次手动 运行 该应用程序!这就是为什么我将安装程序设置为在安装后自动 运行 新版本!

这似乎是使用 Visual Studio 安装程序项目时的常见问题。以下问题确定了一个类似的问题:

Visual Studio Installer > How To Launch App at End of Installer

下面的问题显示了一个解决方案,但对它的可取性存在分歧:

Run exe after msi installation?

我推荐的解决方案是,如果可能的话,尝试使用 WiX (http://wixtoolset.org/) 来编写您的 Windows 安装程序。与 Visual Studio Installer 项目相比,学习曲线可能稍微陡峭一些,但是一旦您适应了它,您就会发现您接触到了 Windows Installer 的更多功能具有 Wix 工具集提供的一系列附加功能。 WiX 的文档提供了一个示例,说明如何实现您正在尝试做的事情:

http://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html

我没有看到明确提及的主要问题是安装结束时程序的 运行 是同步的,因此安装程序会等待它完成。如果您不想将项目更改为 WiX,至少有两种解决方案:

  1. 与其 运行 直接将程序作为自定义操作,不如创建另一个小的自定义操作,异步触发您的 exe 并退出。

  2. Visual Studio 设置不允许您像其他工具那样设置异步设置,但您可以通过打开 MSI 文件(使用 Orca)并转到 CustomAction table。很可能您的自定义操作的类型为 3090。如果您将其更改为 3282(添加 192),自定义操作将是异步的并且安装将完成。