58

我在 C# 中创建了一个 Windows 服务,使用 Visual Studio 2008 我几乎遵循了这个: http: //www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

我按照文章中的说明创建了一个安装项目,然后运行它......它将我的服务安装到C:\Program Files\Product etc....但是,它不会出现在服务列表中......

我错过了什么?

4

9 回答 9

113

您链接的文章中最重要的部分在这里

将自定义操作添加到设置项目

1.在解决方案资源管理器中,右键单击安装项目,指向查看,然后选择自定义操作。出现自定义操作编辑器。

2.在自定义操作编辑器中,右键单击自定义操作节点并选择添加自定义操作。将出现“选择项目中的项目”对话框。

3.双击列表框中的应用程序文件夹将其打开,从MyNewService(Active)中选择主输出,然后单击确定。主要输出被添加到自定义操作的所有四个节点——安装、提交、回滚和卸载。

4.构建设置项目。

如果您跳过这些步骤,您的安装项目将构建您的文件并将其复制到正确的目录;但是,如果没有这些步骤,他们不会将您的二进制文件注册为服务。


我还应该注意,这适用于具有/具有内置设置/部署项目模板的旧版 Visual Studio。较新版本的 Visual Studio 具有不同的设置/部署项目(有些需要第三方软件。)

我建议查看WiX 工具集并在此处查看Windows 服务的 WiX 安装。

于 2009-10-13T14:08:16.957 回答
7

我被这个人当面占有了,所以我把它放在这里以防万一其他人碰到它。

如果您按照指南中的说明进行操作,但仍然遇到安装问题,请确保您的 Installer 类是公开的。内部不行。

于 2010-03-11T20:12:20.523 回答
6

我遇到了同样的问题,然后我意识到我从未为 ServiceInstaller 设置父级。

双击您的项目安装程序。设计者应该展示一个服务安装程序和进程安装程序。当您单击其中一个并查看属性时,您应该注意必须将 Parent 属性都设置为项目安装程序的类名。

或者,如果您在代码中执行此操作,请确保您设置:

serviceInstaller.Parent = this;

serviceProcessInstaller.Parent = this;
于 2011-07-18T12:13:45.590 回答
3

在安装服务时,我强烈建议使用NSSM,它对我的​​所有 WinService 需求都很有效。它可以将任何可执行文件(即使是 .bat、.cmd)安装为服务,并保证您的服务始终正常运行。

要使用此工具:

  1. 这里下载

  2. 并按照此处的说明进行操作

然后检查服务列表,它应该在那里,启动并运行。

于 2014-01-30T21:41:12.980 回答
1

按照这些说明,他们为我工作。具体来说,该部分位于文章底部附近。

MSDN:演练:创建 Windows 服务

于 2009-10-13T14:00:56.900 回答
0

在 Visual Studio 2013 中,我使用 InstallShield 模板进行服务应用程序遇到了同样的问题。但是在使用安装项目模板https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d时,它就像魅力一样

所以下载安装项目模板关闭你的工作室,运行这个安装并启动你的工作室,这将工作。

邓恩。

于 2015-06-12T15:06:37.507 回答
0

这是来自 CodeProject.com 的 tgeek001 的一个很好的教程,它帮助了我。它包括我在上面的帖子中没有看到的几件事: 1. 在卸载服务之前停止服务的事件处理程序代码 2. 设置自定义操作代码中的特定条件和属性以防止失败(这些修复了错误 1001我在按照上面接受的答案中的说明进行操作时遇到的问题) 3. Win Service 属性“删除以前的版本”下拉菜单设置为 true

http://www.codeproject.com/Tips/575177/Window-Service-Deployment-using-VS

以下来自自定义操作设置的教程(案例很重要):

  • 安装,将 Condition 属性设置为以下:“NOT (Installed or PREVIOUSVERSIONSINSTALLED)”
  • 卸载,将 Condition 属性设置为:“NOT UPGRADINGPRODUCTCODE”
  • 提交:将“自定义操作数据”字段设置为:/OldProductCode="[PREVIOUSVERSIONSINSTALLED]"

最后,在 WinService 项目中,确保将下拉菜单“删除以前的版本”设置为 true。

干杯

于 2015-09-28T13:32:18.713 回答
0

我发现您的安装程序类与服务在同一个项目中。安装程序不能存在于服务引用的库项目中。

于 2017-08-28T18:55:52.050 回答
0

请记住在搜索之前检查您为服务提供的名称。(右键->属性->查看服务名

于 2019-10-05T06:53:56.627 回答