Подтвердить что ты не робот

Установка службы Windows с зависимостями

Моя программа установки не поддерживает установку служб, но я могу запустить программу/командную строку и т.д., поэтому мой вопрос: как установить службу Windows и добавить 2 зависимости с помощью командной строки? Программа представляет собой приложение .Net 2.0.

Спасибо

4b9b3361

Ответ 1

Вы можете написать службу самообучения и установить список сервисов, на которые зависит ваш сервис, когда выполняется программа установки.

Основные шаги:

  • Добавить ссылку на System.Configuration.Install в ваш проект.
  • Добавьте класс, который происходит от System.Configuration.Install.Installer и имеет RunInstaller атрибут.
  • В своем конструкторе создайте ServiceProcessInstaller и ServiceInstaller.
  • В объекте ServiceInstaller вы помечаете все зависимости, которые вам нужны/нужны, с помощью свойства ServicesDependedOn.
  • Добавьте эти два установщика в InstallersCollection ваш установщик, унаследованный от System.Configuration.Install.Installer
  • сделано.

edit: забыл упомянуть, что вы можете использовать, например. Installutil.exe, чтобы вызвать установщика.

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        using ( ServiceProcessInstaller procInstaller=new ServiceProcessInstaller() ) {
            procInstaller.Account = ServiceAccount.LocalSystem;
            using ( ServiceInstaller installer=new ServiceInstaller() ) {
                installer.StartType = ServiceStartMode.Automatic;
                installer.ServiceName = "FooService";
                installer.DisplayName = "serves a lot of foo.";

                installer.ServicesDependedOn = new string [] { "CLIPBOOK" };
                this.Installers.Add(procInstaller);
                this.Installers.Add(installer);
            }
        }
    }
}

Ответ 2

Это также можно выполнить с помощью командной строки с повышенными правами с помощью команды sc. Синтаксис:

sc config [service name] depend= <Dependencies(separated by / (forward slash))>

Примечание: после знака равенства есть пробел, а перед ним нет.

Предупреждение: depend= будет переписывать список существующих зависимостей, а не добавлять. Например, если ServiceA уже зависит от ServiceB и ServiceC, если вы запустите depend= ServiceD, ServiceA теперь будет зависеть только от ServiceD.

Примеры

Зависимость от другой службы:

sc config ServiceA depend= ServiceB

Выше означает, что ServiceA не запустится, пока не запустится ServiceB. Если вы остановите ServiceB, ServiceA автоматически остановится.

Зависимость от нескольких других сервисов:

sc config ServiceA depend= ServiceB/ServiceC/ServiceD

Выше означает, что ServiceA не запустится, пока не запустится ServiceB, ServiceC и ServiceD. Если вы остановите любой из ServiceB, ServiceC или ServiceD, ServiceA автоматически остановится.

Чтобы удалить все зависимости:

sc config ServiceA depend= /

Чтобы просмотреть текущие зависимости:

sc qc ServiceA

Ответ 3

Один из доступных методов - sc.exe. Он позволяет устанавливать и управлять службами из командной строки. Ниже приведена более старая статья. Это также позволяет вам указывать зависимости.

Взгляните на статью для sc create для того, что вам нужно.

Ответ 4

В кодепроекте есть проект динамического инсталлятора, который я нашел полезным для установки служб в целом.

Ответ 5

Visual Studio Настройка/развертывание работают для этого. Они не лучший механизм установки, но они отлично работают для простых сценариев.