Yorumları: 10
Konuları: 3
Kayıt Tarihi: 06-10-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.2
- Lazarus / FPC
Rep Puanı: 32
Başlangıç
Merhabalar, windows servislerini kontrol eden bir program yapma aşamasındayım. Program client ve server olarak iki bölümden oluşuyor. Diyelimki 10 client'lı bir network var ve ben kullanıcıların yazıcı servislerinin çalışıp çalışmadığını kontrol etmek istiyorum.Örnek: Client tarafında çalışan uygulamamız bizim belirlediğimiz bir servisin durması sonucu(Örn: yazıcı servisi durduğunda server tarafında ''Exp1 bilgisayarında servis durmuştur" uyarısı gibi..) server tabanlı bölümümüzde alarm veriyor. Delphi ile servislerin çalışıp çalışmadığını nasıl kontrol edebilirim? Bu konuda yardımcı olmanız dileği ile..
Yorumları: 1.572
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.841
Üstad
uses WinSVC;
function isServiceRunning(ServiceName : AnsiString): Boolean;
var
aServiceControl : SC_Handle;
aService : SC_Handle;
status: TServiceStatus;
begin
Result := False;
aService := 0;
aServiceControl := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
if aServiceControl = 0 then Exit;
try
aService := OpenService(aServiceControl, PAnsiChar(ServiceName), SERVICE_QUERY_STATUS);
if aService = 0 then Exit;
if not QueryServiceStatus(aService, status)
then Exit;
Result := status.dwCurrentState = SERVICE_RUNNING;
finally
if aService <> 0 then CloseServiceHandle(aService);
if aServiceControl <> 0 then CloseServiceHandle(aServiceControl)
end;
end;
There's no place like 127.0.0.1
Yorumları: 151
Konuları: 14
Kayıt Tarihi: 18-09-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 552
Acemi
Merhabalar
Gerekli paylaşım güzel olmuş bir sorum olacaktı her winde çalışır mi 7,10 gibi
Teşekkürler
Yorumları: 1.572
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.841
Üstad
09-10-2017, Saat: 13:21
(Son Düzenleme: 09-10-2017, Saat: 13:25, Düzenleyen: SimaWB.)
Bir başka alternatif
WMI kullanmak:
use ActiveX;
function isServiceRunning(ServiceName: string): Boolean;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet:= FWMIService.ExecQuery('SELECT Name, State FROM Win32_Service WHERE Name="'+ServiceName+'" and State="Running"','WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = S_OK then
begin
Result := True;
FWbemObject := Unassigned;
end
else
Result := False;
end;
Not: WMI kullanarak uzak makinelerdeki hizmetlerin durumunu da sorgulayabilirsiniz.(Kullanıcı adı ve şifre biliniyorsa)
(09-10-2017, Saat: 13:12)r3n4m3 Adlı Kullanıcıdan Alıntı: Merhabalar
Gerekli paylaşım güzel olmuş bir sorum olacaktı her winde çalışır mi 7,10 gibi
Teşekkürler
Çalışır.
MSDN'ye bakıldığında kullanılan Windows API'lerin desteklendiği işletim sistemleri için şunlar yazıyor:
Minimum supported client -> Windows XP [desktop apps only]
Minimum supported server -> Windows Server 2003 [desktop apps only]
https://msdn.microsoft.com/en-us/library...s.85).aspx
https://msdn.microsoft.com/en-us/library...s.85).aspx
https://msdn.microsoft.com/en-us/library...s.85).aspx
There's no place like 127.0.0.1