题 安装后,Windows服务未出现在服务列表中


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

我按照文章中的指示创建了一个安装项目,并运行它... 它将我的服务安装到c:\ program files \ product等....但是,它不会出现在服务列表中..

我错过了什么?


48
2017-10-13 13:54


起源


没有进一步的信息很难猜到。如果您按照文章中的描述执行了所有操作并安装了该服务,那么它应该可用。 - Foxfire
您是否尝试刷新服务控制台?控制台中的列表不会自动更新。如果您在安装服务时已打开控制台,请尝试刷新(或重新启动)。 - Matt Davis
太晚但值得一提:加 custom action 设置并确保安装程序类 public - Sarvesh Mishra


答案:


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

向安装项目添加自定义操作

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

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

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

4.建立安装项目。

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


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

我建议调查一下 WiX工具集 并在这里查看 WiX安装Windows服务。


93
2017-10-13 14:08



有没有办法在安装过程中启动服务?我知道您可以将StartType配置为自动,但这只会在重新启动后启动服务。 - Taylor Leese
非常感谢@Nate。当我按照你的指示回复我时,这就是我上次必须做的事情。 - m.edmondson
发现 !谢谢,它帮助了我 - Sri7


我被这个人所拥有,所以我把它放在这里以防万一其他人遇到它。

如果您按照指南中的说明进行操作但仍然无法安装,请确保您的安装程序类是公开的。内部不起作用。


6
2018-03-11 20:12



噢,伙计,谢谢。我觉得这太疯狂了!我很自大,并认为“meh,它只是一个安装程序 - 为什么要打扰公共类包装?”并且甚至没有思考就删除它 - 繁荣,问题出现了。 - Alexandru


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

双击项目安装程序。设计人员应该显示Service Installer和Process Installer。单击任一并查看属性时,应注意Parent属性,该属性必须都设置为Project Installer的类名。

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

serviceInstaller.Parent = this;

serviceProcessInstaller.Parent = this;

5
2017-07-18 12:13



谢谢!这个人非常帮助我 - amaters


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

要使用此工具:

  1. 从下载 这里 

  2. 并按照说明操作 这里

然后检查服务列表,它应该在那里,向上和运行。


3
2018-01-30 21:41





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

MSDN:演练:创建Windows服务


1
2017-10-13 14:00





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

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

邓恩。


0
2018-06-12 15:06





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

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

以下内容来自自定义操作设置教程(案例事项):

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

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

干杯


0
2017-09-28 13:32