如何停止 Windows 服务进行升级安装?

Ela*_*lan 4 c# installation windows-installer windows-services

我使用 Visual Studio 2008 开发了一个 Windows 服务和一个安装项目。当我进行升级安装时,我收到以下警告:

以下应用程序正在使用安装程序必须更新的文件。您可以关闭应用程序并单击“再试一次”,或单击“继续”以便安装程序继续安装,并在系统重新启动时替换这些文件。

我想在升级安装过程中停止 Windows 服务。我已尝试创建自定义操作并覆盖 OnBeforeInstall 方法,但是在警告弹出消息已经发生后调用此方法为时已晚。

作为 msi 安装程序的一部分,有什么方法可以实现这一点。在执行 msi 安装程序之前,我宁愿不必将此作为单独的任务来执行。

更新:
根据进一步的研究,我发现 MSI 数据库确实支持这一点,但是内置的 Visual Studio 安装程序(设置)项目不提供执行此操作的方法。必须调整 MSI 数据库,或者使用 WiX 或商业安装程序。

小智 5

如果您想继续编辑 MSI ServiceControl 表,以下 VBS 脚本对我有用:

Dim installer, database, view, result
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase ("Installer.msi", 1)
Set view = database.OpenView("INSERT INTO ServiceControl (ServiceControl,Name,Event,Arguments,Wait,Component_) VALUES ('ServiceName','ServiceName',170,null,null,'C__751A71A3822A287367770DB29839A759')") 
view.Execute
database.Commit
Set database = nothing
Run Code Online (Sandbox Code Playgroud)