c# - 如何停止 Windows 服务以进行升级安装?

标签 c# windows-services installation windows-installer

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

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

我想在升级安装期间停止 Windows 服务。我已经尝试创建一个自定义操作并覆盖 OnBeforeInstall 方法,但是在警告弹出消息已经出现之后调用它为时已晚。

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

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

最佳答案

如果您想继续编辑 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

关于c# - 如何停止 Windows 服务以进行升级安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485243/

相关文章:

linux - 看了相关帖子,在没有root权限的Linux上还是无法安装GCC 4.7?

c# - 如何在我的 WPF 项目中导入 windows.media.capture?

c# - 如何关闭用于在 WCF 服务中生成流式处理结果的数据库连接?

c# - 判断一个句子是否包含特定的词

c# - 如何为自定义控件实现 AutoSize 属性?

c# - 如何从 Windows 服务运行控制台应用程序?

c# - 更改数据集时,SqlDependency 不会触发 OnChange 事件

没有 "Unknown Sources"复选框的 Android APK 分发?

c# - 一个 map 网络如何从windows服务驱动?

installation - 切换到 Inno Setup 安装完成页面