【发布时间】:2026-02-13 13:30:02
【问题描述】:
我正在使用 MSI 安装程序升级我的自定义 Windows 服务。我正在使用 C# 代码启动 MSI 进程,首先卸载服务,然后安装新版本。
我需要确保在 MSI 开始安装新版本之前,之前的版本已被卸载。如何在 c# 中添加此检查?
【问题讨论】:
-
如果您在 Visual Studio 中使用setup extension,在安装新应用/服务之前,将执行卸载之前的应用/服务的操作
-
你应该说你正在使用什么工具。 VS 安装项目使用安装程序类,其他工具使用内置的 Windows Installer 功能。
-
我正在使用 InstallSheild.. 这个问题是因为当 MSI 可以从注册表中删除服务时,我的代码开始安装它的新版本。因此 MSI 确实从机器注册表中删除了该服务,但由于此过程中的时间滞后,新版本安装失败。为了解决这个问题,我现在使用 sc query servicename 在安装之前检查服务是否存在,所以当服务存在时我正在做
thread.sleep(1000)
标签: c# windows-installer