Существует ли относительно простой способ установки и запуска гибридного .Net exe (консольного приложения / службы Windows) в качестве службы? - PullRequest
2 голосов
/ 03 сентября 2010

Предположим, исполняемый файл с именем ConsoleOrService.exe записан в C#.В настоящее время это гибрид.Я могу просто запустить его из командной строки или установить с помощью .Net installutil ConsoleOrService.exe, а затем запустить службу.Я хотел бы третий вариант: запустить его в командной строке следующим образом: ConsoleOrService.exe --install и заставить его делать всю работу.

  1. Возможно ли это?
  2. Это сложно?
  3. Как мне начать?

Спасибо и позвольтезнать, если есть вопросы, пожалуйста.

1 Ответ

2 голосов
/ 03 сентября 2010

Это на самом деле довольно просто.Я использовал его во многих моих собственных сервисах (фактически, ВСЕ мои сервисы способны самостоятельно устанавливать / удалять). Я управляю им с помощью переключателя командной строки, например /install или /uninstall.

Установка выполняется следующим образом:

private static void InstallService()
{
 var ti  = new System.Configuration.Install.TransactedInstaller();
 var si  = new MyServiceInstaller();
 var cl  = new string[] { string.Format(CultureInfo.InvariantCulture, "/assemblypath={0}", System.Reflection.Assembly.GetExecutingAssembly().Location) };
 var ctx = new System.Configuration.Install.InstallContext(null, cl);

 ti.Installers.Add(si);
 ti.Context = ctx;
 ti.Install(new Hashtable());
}

Удаление такое же, за исключением того, что вы звоните ti.Uninstall(null); вместо ti.Install(...);.

Мой MyServiceInstallerэто класс, который наследуется от класса System.Configuration.Install.Installer (как это обычно делается в службе).

...