Установка службы Windows с зависимостями - PullRequest
15 голосов
/ 29 июня 2009

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

Спасибо

Ответы [ 5 ]

16 голосов
/ 29 июня 2009

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

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

  • Добавьте ссылку на 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);
            }
        }
    }
}
10 голосов
/ 29 сентября 2011

Это также можно сделать с помощью командной строки с повышенными привилегиями, используя команду 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

1 голос
/ 02 июля 2009

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

1 голос
/ 29 июня 2009

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

1 голос
/ 29 июня 2009

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

Посмотрите на статью для sc create порции того, что вам нужно.

...