Служба Inno для Windows?
У меня есть .Net-служба Windows. Я хочу создать установщик для установки этой службы Windows.
В основном, он должен сделать следующее:
- Pack
installutil.exe
(требуется ли?) - Запустить
installutil.exe
installutil.exe MyService.exe - Начать MyService
Кроме того, я хочу предоставить деинсталлятор, который выполняет следующую команду:
- FileSystemWatcher Не удается получить доступ к сетевому диску
- Как создать службу Windows из приложения java
- Как назначить разрешения для управления услугами Windows при включенном UAC?
- Установите службу Windows .NET без InstallUtil.exe
- Каковы конкретные различия между .msi и файлом setup.exe?
installutil.exe /u MyService.exe
Как это сделать с помощью Inno Setup?
- Как я могу перезапустить службу Windows программно в .NET.
- Как сделать вызов моей службы WCF асинхронным?
- Как служба Windows может выполнить приложение GUI?
- Автоматизация Office через службу Windows на сервере 2008
- Печать из службы .NET
- Как запустить CMD.exe под учетной записью локальной системы?
- Как общаться с услугой Windows?
- Как получить текущее имя пользователя из службы Windows в .NET?
Вам не нужен 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 и начать снова после.
Для выполнения этой функции есть некоторые функции скрипта – Функции для запуска, остановки, установки, удаления службы