Служба Inno для Windows?

У меня есть .Net-служба Windows. Я хочу создать установщик для установки этой службы Windows.

В основном, он должен сделать следующее:

  1. Pack installutil.exe (требуется ли?)
  2. Запустить installutil.exe installutil.exe MyService.exe
  3. Начать MyService

Кроме того, я хочу предоставить деинсталлятор, который выполняет следующую команду:

 installutil.exe /u MyService.exe 

Как это сделать с помощью Inno Setup?

Вам не нужен installutil.exe и, возможно, у вас даже нет прав на его распространение.

Вот как я это делаю в своем приложении:

 using System; using System.Collections.Generic; using System.Configuration.Install; using System.IO; using System.Linq; using System.Reflection; using System.ServiceProcess; using System.Text; static void Main(string[] args) { if (System.Environment.UserInteractive) { string parameter = string.Concat(args); switch (parameter) { case "--install": ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location }); break; case "--uninstall": ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); break; } } else { ServiceBase.Run(new WindowsService()); } } 

В принципе, вы можете самостоятельно установить или удалить свой сервис с помощью ManagedInstallerClass как показано в моем примере.

Тогда просто добавить в свой скрипт InnoSetup что-то вроде этого:

 [Run] Filename: "{app}\MYSERVICE.EXE"; Parameters: "--install" [UninstallRun] Filename: "{app}\MYSERVICE.EXE"; Parameters: "--uninstall" 

Вот как я это сделал:

 Exec(ExpandConstant('{dotnet40}\InstallUtil.exe'), ServiceLocation, '', SW_HIDE, ewWaitUntilTerminated, ResultCode); 

По-видимому, Inno setup имеет следующие константы для ссылки на папку .NET в вашей системе:

  • {} Dotnet11
  • {} Dotnet20
  • {} Dotnet2032
  • {} Dotnet2064
  • {} Dotnet40
  • {} Dotnet4032
  • {} Dotnet4064

Более подробная информация доступна здесь .

Вы можете использовать

 Exec( ExpandConstant('{sys}\sc.exe'), ExpandConstant('create "MyService" binPath= {app}\MyService.exe start= auto DisplayName= "My Service" obj= LocalSystem'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode ) 

для создания сервиса. См. « Sc.exe » о том, как запустить, остановить, проверить статус службы, удалить службу и т. Д.

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

Для выполнения этой функции есть некоторые функции скрипта – Функции для запуска, остановки, установки, удаления службы

  • Печать html-документа из Windows Service без диалога печати
  • Служба Windows не смогла получить скриншот в Windows 7
  • Как иметь петлю в службе Windows без использования таймера
  • как отложить выключение и запустить процесс в службе windows
  • Как программно установить Windows-сервис на C #?
  • Как запустить консольное приложение из Windows Service?
  • Как изменить тип запуска Windows Service в .NET (после установки)?
  • Что делает «задержка запуска» в типе запуска для службы Windows?
  • Служба зависает в WaitForExit после вызова командного файла
  • Извлечение фабрики COM-classа для компонента с CLSID {XXXX} не удалось из-за следующей ошибки: 80040154
  • Запуск / остановка службы Windows из учетной записи пользователя, отличного от администратора
  • Давайте будем гением компьютера.