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

时间:2012-05-16 23:40:30

标签: c# windows-services windows-installer custom-action

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

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

如何编写自定义操作以进行安装或卸载msi,卸载Windows服务?

2 个答案:

答案 0 :(得分:2)

您可以使用ServiceInstaller课程。一个快速的解决方案是找到installutil工具并针对您的Service.exe执行它,但您必须捕获输出以查看安装是否成功,并且您无法控制{{1} },InstallCommitRollback阶段。

答案 1 :(得分:1)

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

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

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