Наш процесс установки включает службу Windows, которая устанавливается, если наше программное обеспечение настроено для установки в качестве сервера (по сравнению с установкой клиента). Я добавил библиотеку сервисов, чтобы иметь возможность управлять службами, а затем в файлах добавлял обработчики для событий BeforeInstall
и AfterInstall
...
[Files]
Source: "MyService.exe"; DestDir: "{app}"; Check: IsServer; BeforeInstall: BeforeServiceInstall('MyServiceName', 'MyService.exe'); AfterInstall: AfterServiceInstall('MyServiceName', 'MyService.exe')
procedure BeforeServiceInstall(SvcName, FileName: String);
var
S: Longword;
begin
//If service is installed, it needs to be stopped
if ServiceExists(SvcName) then begin
S:= SimpleQueryService(SvcName);
if S <> SERVICE_STOPPED then begin
SimpleStopService(SvcName, True, True);
end;
end;
end;
procedure AfterServiceInstall(SvcName, FileName: String);
begin
//If service is not installed, it needs to be installed now
if not ServiceExists(SvcName) then begin
if SimpleCreateService(SvcName, 'My Service Name', ExpandConstant('{app}')+'\' + FileName, SERVICE_AUTO_START, '', '', False, True) then begin
//Service successfully installed
SimpleStartService(SvcName, True, True);
end else begin
//Service failed to install
end;
end;
end;
При первоначальной установке службы (она еще не существует и в настоящее время не запущена) установка/запуск этой службы работает нормально. Однако при запуске этого установщика при существующей установке (обновление) установщик останавливается, когда распознает, что эта служба запущена, и предлагает завершить процесс (прежде чем он вызывает обработчик BeforeServiceInstall()
)...
Как предотвратить появление этой подсказки для служб? Я не требую перезагрузки и все равно хочу, чтобы это приглашение отображалось для всех других файлов.