Inno Setup для службы Windows?
у меня есть служба .Net Windows. Я хочу создать установщик для установки этой службы windows.
в принципе, он должен сделать следующее:
- упаковка
installutil.exe
(требуется ли?) - выполнить
installutil.exe
MyService.exe - Запуск MyService
кроме того, я хочу предоставить деинсталлятор, который запускает следующую команду:
installutil.exe /u MyService.exe
как это сделать с помощью Inno Setup?
4 ответа:
не нужно
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}
дополнительная информация здесь.
Если вы хотите избежать перезагрузки при обновлении пользователя, вам нужно остановить службу перед копированием exe и начать снова после этого.
есть некоторые функции скрипта, чтобы сделать это в сервис-функции для запуска, остановки, установки, удаления сервиса
можно использовать
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 " о том, как запустить, остановить, проверить состояние службы, удалить службу и т. д.