merhaba;
bir servisin o anda çalışıp çalışmadığını nasıl kontrol ederiz? Örneğin apache'nin. "net start","net stop" dışında "net status apache" gibi bir komut yokmu? Ben "net " komutlarını araştırdım fakat buna benzer birşey bulamadım?
nt servis kontrolü
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Kod: Tümünü seç
Res := QueryServiceStatus(ServiceHandle, Status);
while (Res) do
begin
if Status.dwCurrentState = SERVICE_RUNNING then
Break
else
if Status.dwCurrentState = SERVICE_STOPPED then
Break;
QueryServiceStatus(ServiceHandle, Status);
end;
cevap makalenin icinden cıkartılabilir.
her zaman pismis as bulamaz isek pisirmeyi de ogrenmeliyiz.
ÜŞENME,ERTELEME,VAZGEÇME
evet makalede biraz değişiklik yapılınca oluyor. Teşekkür ederim, ihtiyacı olan arkadaşlar varsa, aşağıdaki gibi sorunsuz çalışıyor...
Kod: Tümünü seç
var
SCM: SC_HANDLE;
ServiceHandle: SC_HANDLE;
Res: Boolean;
Temp: PChar;
Status: SERVICE_STATUS;
Err: Integer;
begin
SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCM = 0 then
raise Exception.Create('Servis Yöneticisi Açılamadı. Hata: ' + SysErrorMessage(getLastError));
ServiceHandle := OpenService(SCM, PChar('apache'), SERVICE_ALL_ACCESS);
if ServiceHandle = 0 then
begin
CloseServiceHandle(SCM);
raise Exception.Create('Apache Servisi Açılamadı/Galiba Yok. Hata: ' + SysErrorMessage(getLastError));
end;
if Res then
begin
Res := QueryServiceStatus(ServiceHandle, Status);
if Status.dwCurrentState = SERVICE_RUNNING then
showmessage('RUNNING')
else
if Status.dwCurrentState = SERVICE_STOPPED then
showmessage('STOPPED');
QueryServiceStatus(ServiceHandle, Status);
end;
CloseServiceHandle(SCM);
end;
Kod: Tümünü seç
function GetServiceStatus(const ServiceName: string): SERVICE_STATUS;
var
SCM: SC_HANDLE;
ServiceHandle: SC_HANDLE;
begin
SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCM = 0 then
raise Exception.Create('HATA');
ServiceHandle := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
if ServiceHandle = 0 then
begin
CloseServiceHandle(SCM);
case GetLastError of
ERROR_ACCESS_DENIED: raise Exception.Create('Yetersiz ayrıcalıklar');
ERROR_INVALID_HANDLE: raise Exception.Create('Geçersiz Handle');
ERROR_INVALID_NAME:raise Exception.Create('Servis Bulunamadı');
ERROR_SERVICE_DOES_NOT_EXIST: raise Exception.Create('Servis bulunamadı');
end;
end;
if not QueryServiceStatus(ServiceHandle, Result) then
raise Exception.Create('Durum Alınamadı');
end;
