2011-02-24 65 views
3

我有一个在c#中创建的Windows服务。已安装的Win服务不在服务管理器中显示

与我一直在努力的其他一些相比,它相对简单。

我建立了一个安装项目来安装它进行一些测试。

我添加了服务项目的主要输出,并正确添加了所有依赖关系。

我去了视图>自定义操作,并将我的主要输出添加到安装,提交,回滚和卸载。

项目建成,我右键单击该项目,然后单击安装。

安装回来了成功,我可以在添加控制面板上查看服务/删除程序,但是当我进入服务管理器...没有...

任何人都可以提供一些INSITE或任何可能导致成功安装的服务不会显示在服务管理器上的其他内容。

+0

它是否将服务可执行文件安装到磁盘上?你可以在.exe上使用installutil,看它是否会给你一个错误? – 2011-02-24 19:19:22

+0

使用MSI日志记录查看可能出错的内容。我不知道如何以这种方式创作MSI,所以可能会有任何问题。但日志文件将提供进一步的线索。 – 0xC0000022L 2011-02-24 19:21:14

+0

是的,它将可执行文件安装到我期望的磁盘上。当我尝试使用installutil时,它会打开一个带有一些文本的新命令窗口,并在我能够读取它之前再次关闭它,并且在命令窗口中没有任何更改,我输入命令 – Patrick 2011-02-24 19:21:33

回答

4

寻找在注册表中的服务名称原谅我,如果这个不用说了,但是你有没有提到你在你的自定义操作执行哪些代码。你的服务程序集必须有一个派生自System.Configuration.Install.Installer的类,并且该类必须具有[RunInstaller(true)]属性。在该类中,您需要创建一个System.ServiceProcess.ServiceInstallerSystem.ServiceProcess.ServiceProcessInstaller的实例,在这些实例上设置适当的参数,并将它们添加到Installers集合中。 ServiceInstaller和ServiceProcessInstaller MSDN页面有一个非常基本的例子,但如果这是需要的,它应该足以让你到达那里。

+0

已经很久了......我想我忘了那部分......谢谢。 – Patrick 2011-02-24 19:57:45

1

确保您在“Display name”属性中提供了一些值。

从命令提示符处使用以下命令“sc query <service_name>”查看您的Windows服务是否已正确安装。如果您不确定服务名称,请在执行此命令后使用以下命令“sc query state= all >c:\ServicesList.txt”搜索C:\驱动器中的ServicesList.txt。

如果这也不起作用尝试下HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

+0

sc query state = all> c:\ ServicesList.txt让我访问被拒绝。信息? – Patrick 2011-02-24 19:34:01

+0

当我检查注册表它没有列出....所以,即使我已经添加了自定义操作,它不注册? – Patrick 2011-02-24 19:36:53

+0

您是否以拥有管理员权限的用户登录?您需要管理员权限才能安装Windows服务。 – AbrahamJP 2011-02-24 19:39:45

1

你说你把你的主要输出添加到安装等,但你是否创建了一个安装程序派生类来做实际安装的Windows服务?我不是在说安装项目本身,但是在你的项目中应该有一个安装程序类,它实际上是为你安装的。

我在我的博客上发布了一篇关于创建易于安装的服务框架的文章,它有创建isntaler类的示例。

http://blackrabbitcoder.net/archive/2010/10/07/c-windows-services-2-of-2-self-installing-windows-service-template.aspx

0

对我来说,这个问题的解决办法很简单,我忘了访问修饰符“公共”添加到类。在添加访问修饰符后,服务在服务列表中现在可见。