Здравствуйте, Дон Педро, Вы писали:
ДП>Здравствуйте, fcuk_moder, Вы писали:
_>>_>>if IsServiceInstalled(FullServiceName) then
_>>begin
_>>if IsServiceRunning(FullServiceName) = True then
_>>
ДП>Это встроенные в InnoSetup функции?
function OpenSCManager(lpMachineName, lpDatabaseName: String; dwDesiredAccess: DWORD): HANDLE;
external 'OpenSCManagerA@advapi32.dll stdcall';
function OpenService(hServiceControlManager: HANDLE; lpServiceName: string; dwDesiredAccess: DWORD): HANDLE;
external 'OpenServiceA@advapi32.dll stdcall';
function CloseServiceHandle(hServiceControlObject: HANDLE): Boolean;
external 'CloseServiceHandle@advapi32.dll stdcall';
function QueryServiceStatus(hService: HANDLE; var ServiceStatus: SERVICE_STATUS): Boolean;
external 'QueryServiceStatus@advapi32.dll stdcall';
function ControlService(hService: HANDLE; dwControl: DWORD; var ServiceStatus: SERVICE_STATUS): Boolean;
external 'ControlService@advapi32.dll stdcall';
function OpenServiceManager(): HANDLE;
begin
Result := 0;
if UsingWinNT then
begin
Result := OpenSCManager('', 'ServicesActive', SC_MANAGER_ALL_ACCESS);
end
end;
function IsServiceInstalled(ServiceName: String): Boolean;
var
hServiceControlManager: HANDLE;
hService : HANDLE;
begin
Result := False;
hServiceControlManager := OpenServiceManager();
if hServiceControlManager <> 0 then
begin
hService := OpenService(hServiceControlManager, ServiceName, SERVICE_QUERY_CONFIG);
if hService <> 0 then
begin
Result := True;
CloseServiceHandle(hService)
end;
CloseServiceHandle(hServiceControlManager)
end
end;
function IsServiceRunning(ServiceName: String): Boolean;
var
hServiceControlManager,
hService : HANDLE;
Status : SERVICE_STATUS;
begin
Result := False;
hServiceControlManager := OpenServiceManager();
if hServiceControlManager <> 0 then
begin
hService := OpenService(hServiceControlManager, ServiceName, SERVICE_QUERY_STATUS);
if hService <> 0 then
begin
if QueryServiceStatus(hService, Status) then
begin
Result := (Status.dwCurrentState = SERVICE_RUNNING)
end;
CloseServiceHandle(hService)
end;
CloseServiceHandle(hServiceControlManager)
end
end;
function StopService(ServiceName: String): Boolean;
var
hServiceControlManager,
hService : HANDLE;
Status : SERVICE_STATUS;
begin
Result := False;
hServiceControlManager := OpenServiceManager();
if hServiceControlManager <> 0 then
begin
hService := OpenService(hServiceControlManager, ServiceName, SERVICE_STOP);
if hService <> 0 then
begin
Result := ControlService(hService, SERVICE_CONTROL_STOP, Status);
CloseServiceHandle(hService)
end;
CloseServiceHandle(hServiceControlManager)
end
end;