在自定义操作中安装 Windows 服务

本文关键字:Windows 服务 安装 自定义 操作 | 更新日期: 2023-09-27 18:34:29

我创建了一个 c# 4.0 Windows 服务。我为它创建了一个安装程序项目(.msi(,该项目将服务安装到特定文件夹。

为了完全自动化该过程,我想将服务作为安装程序的自定义操作的一部分进行安装。

如何对自定义操作进行编码以安装或在卸载 msi 时卸载 Windows 服务?

在自定义操作中安装 Windows 服务

您可以使用 ServiceInstaller 类。一个快速的解决方案是找到installutil工具并针对您的服务.exe执行它,但您必须捕获输出以查看安装是否成功,并且您对InstallCommitRollbackUninstall阶段没有太多控制权。

简单的答案:不要。正确的方法是使用 MSI 数据库本身安装它,即 ServiceInstallServiceControl表。每个用于创建MSI的"方便"IDE以及WiX都带有基元来利用此内置功能。

这是最佳做法(就像在 MSI 中包含 COM 注册而不是调用 COM (DLL( 的DllRegisterServer进行注册(的原因是,在用户尝试删除应用程序时,应用程序可能已失效。

即使较新的Windows安装程序仍然可以执行数据库操作,例如在升级Windows本身之后,而您的代码可能会拒绝运行或可能由于其他原因而无法运行。