2009-11-09 4 views
52

У меня есть исполняемый файл службы Windows, который, как мне известно, написан на .NET, который мне нужно установить под другим именем службы, чтобы избежать конфликта. В любом случае установка не укажет имя службы. Если у меня есть только доступ к двоичному файлу, есть ли способ переопределить имя службы, когда я устанавливаю его с помощью installutil?Любой способ переопределить имя службы Windows Windows без перекомпиляции?

ответ

84

Нужно ли использовать InstallUtil? Вот команды, чтобы сделать то, что вы хотите использовать СБН:

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

Ссылка: http://support.microsoft.com/kb/251192

+0

Это похоже на то, что я хочу - однако я не могу заставить его работать. Я просто получаю сообщение об использовании. – Nathan

+30

Моя проблема заключалась в том, что, по-видимому, * должно * быть пробелом между знаком равенства и значением binPath, например. sc создать ahSchedulerService binPath = "MyService.exe", а не sc создать ahSchedulerService binPath = "MyService.exe". – Nathan

+0

А, я забыл об этом. Извините за плохой пример. –

1

Попробуйте установить службу с помощью sc.exe. Быстрый поиск даст много документации. С помощью этого инструмента легко изменить существующие службы и/или добавить новые, включая имена.

Редактировать: Я устанавливаю свои сервисы .NET с помощью этого инструмента.

22

Это не правда, что InstallUtil не позволяет настроить имя службы. Я делаю это все время, как это

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

не работает для меня даже с cmd с привилегиями администратора. –

+4

, если у вас уже есть служба с тем же именем, что и exe, она выдаст ошибку 'System.ComponentModel.Win32Exception: указанная служба уже существует'. Я пытался установить 2 экземпляра одного и того же сервиса и называть их по-разному. Используйте методы создания sc, приведенные ниже, ответы – PUG

+3

Не работает. Предоставляет ошибку, что мой сервис уже существует. – Loophole

3

enter image description here

Это точно работает для меня!

Я надеюсь, что кто-то сможет это использовать. Установщик проект

20
  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

Source

+0

ОЧЕНЬ полезный - спасибо. – Mani5556

+0

Это было очень полезно, мне пришлось перекомпилировать мой служебный исполняемый файл, чтобы он работал, как только я добавил этот код, это не проблема для меня. –

Смежные вопросы