1

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

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

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

4

2 回答 2

2

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

于 2012-05-16T23:52:54.607 回答
1

简单的回答:不要。正确的方法是使用 MSI 数据库本身,即ServiceInstallServiceControl表来安装它。每个用于创建 MSI 的“方便”IDE 以及 WiX 都带有使用这个内置工具的原语。

这是最佳实践的原因,就像在您的 MSI 中包含 COM 注册而不是调用DllRegisterServerCOM (DLL) 进行注册一样,您的应用程序可能在用户尝试删除它时已失效。

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

于 2012-05-16T23:56:12.793 回答