有什么方法可以覆盖.NET Windows服务名称而无需重新编译?


73

我有一个Windows服务可执行文件,我知道它是用.NET编写的,我需要使用其他服务名称进行安装以避免冲突。无论如何,安装不提供指定服务名称。如果我只能访问二进制文件,那么用installutil安装该文件时是否有覆盖服务名的东西?

Answers:


107

您必须使用InstallUtil吗?以下是使用sc进行所需操作的命令:

sc create MyService binPath= "MyService.exe" DisplayName= "MyService"  
sc description MyService "My description"

参考:http : //support.microsoft.com/kb/251192


1
这看起来确实正是我想要的-但是我无法使其正常工作。我只是不断收到“使用情况”消息。
内森2009年

34
我的问题是,等号和binPath值之间显然必须有一个空格,例如sc create ahSchedulerService binPath =“ MyService.exe”,而不是sc create ahSchedulerService binPath =“ MyService.exe”。
内森2009年

啊,我忘了。很抱歉给您一个不好的例子。
乔什·耶格尔

当我使用SC命令创建服务实例时,我发现必须将整个路径放在EXE名称之前。在运行SC之前,我已经将命令提示符目录更改为与EXE相同,以为足够了,但事实并非如此。尝试启动服务时,出现错误消息“系统找不到指定的文件”。因此,SC命令必须具有如下参数:binPath =“” C:\ whatever \ servieName.exe“
John Gilmer

30

InstallUtil不允许您配置服务名称是不正确的。我一直这样

InstallUtil.exe /servicename="<service name>" "<path to service exe>"

6
如果您已经有一个与exe同名的服务,它将给出error System.ComponentModel.Win32Exception: The specified service already exists。我试图安装2个相同服务的实例,并以不同的方式命名它们。使用以下答案中给出的sc创建方法
PUG 2014年

4
不起作用。给出我的服务已存在的错误。
杰森·凯利2015年

2
如果您有项目安装程序,并且可以像@Volodymyrs中那样覆盖安装和卸载,则可以正常工作回答stackoverflow.com/a/25259719/169714
JP Hellemons '16

不适用于从Visual Studio创建的默认安装程序
Gelootn

如果我将参数“ servicename”更改为“ name”,则对我有用。
dbd

25
  1. 将项目安装程序添加到您的服务
  2. 添加方法以获取CustomService名称

    private void RetrieveServiceName() 
    {
        var serviceName = Context.Parameters["servicename"];
        if (!string.IsNullOrEmpty(serviceName))
        {
            this.SomeService.ServiceName = serviceName;
            this.SomeService.DisplayName = serviceName;
        }
    }
    
  3. 呼吁安装和卸载

    public override void Install(System.Collections.IDictionary stateSaver)
    {
       RetrieveServiceName();
      base.Install(stateSaver);
    }
    
    
    public override void Uninstall(System.Collections.IDictionary savedState)
    
    {
       RetrieveServiceName();
       base.Uninstall(savedState);
    }
    
  4. installutil /servicename=”My Service [SysTest]” d:\pathToMyService\Service.exe

资源


这非常有用,添加代码后,我必须重新编译服务可执行文件才能使其正常工作,这对我来说不是问题。
特里·克南


2

尝试使用sc.exe安装服务。快速搜索将产生大量文档。使用该工具,可以轻松修改现有服务和/或添加新服务-包括名称。

编辑:我使用此工具安装.NET服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.