如何安装在.NET 3.5中开发的Windows服务?

我使用Visual Studio 2008开发了一个Windows服务。我想在没有安装Visual Studio但安装了.NET 3.5的机器上安装该服务。

通常,InstallUtil.exe将用于安装Windows服务,但.NET 3.5中不提供InstallUtil.exe实用程序。 当我尝试使用.NET 2.0安装该服务时,该服务将显示在服务列表中,但在启动服务时,Windows服务错误1053即将到来。 我们如何避免这个问题并成功安装服务?

对于.Net 2.0和VS2005,有一个Microsoft KB。 在.Net 3.5和VS2008中,程序完全相同。

http://support.microsoft.com/kb/317421

这里有一篇更好的文章,图片更清晰。 (有时KB不像你在其他地方找到的教程那么友好。)

http://aspalliance.com/1316_Working_with_Windows_Service_Using_Visual_Studio_2005.3

它实际上非常简单,因为我几天前刚刚做了一些我做的事情。

因此,在您的服务项目中,您希望:

  1. 在解决方案资源管理器中,双击您的服务.cs文件。 它应该显示一个全灰色的屏幕,并讨论从工具箱中拖动东西。
  2. 然后右键单击灰色区域并选择添加安装程序。 这将向项目添加安装程序项目文件。
  3. 然后,您将在ProjectInstaller.cs(serviceProcessInstaller1和serviceInstaller1)的设计视图中拥有2个组件。 然后,您应该根据需要设置属性。

现在你需要制作一个安装项目。 最好的办法是使用设置向导。

  1. 右键单击您的解决方案并添加一个新项目:添加>新建项目>设置和部署项目>设置向导
  2. 在第二步选择“为Windows应用程序创建安装程序”。
  3. 在第3步,选择“……的主输出”
  4. 单击“完成”。

现在您需要编辑安装程序以确保包含正确的输出。

  1. 右键单击解决方案资源管理器中的安装项目。
  2. 选择视图>编辑器>自定义操作。
  3. 右键单击“自定义操作”树中的“安装”操作,然后选择“添加自定义操作…”
  4. 在“在项目中选择项目”对话框中,选择“应用程序文件夹”并单击“确定”
  5. 单击“确定”以选择“主输出…”选项。 应该创建一个新节点。
  6. 对提交,回滚和卸载操作重复步骤4 – 5。

现在只需构建您的安装程序,它将生成一个MSI和一个setup.exe。 选择您要用于部署服务的任何一种。

如果您一直使用InstallUtil.exe来安装Windows服务,那么这意味着您已将ProjectInstaller组件添加到您的服务中。 所有InstallUtil.exe都使用reflection来查找服务中嵌入的安装程序组件并在其上执行一些方法。 因此,您可以修改Windows服务以自行安装和卸载,即您不再需要依赖目标计算机上可用的InstallUtil.exe 。 我已经成功使用了几个月了。 请按照我在此提供的步骤进行操作。 这个想法最初属于Marc Gravell和这篇文章 。

消息:

“错误1053:服务没有及时响应启动或控制请求。”

通常是对启动Windows服务的问题的一般响应。 你应该做的是检查事件日志,你可能会发现阻止服务启动的真正错误。