Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Windows Servislerini Kontrol Etmek
#1
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..
Cevapla
#2
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
WWW
Cevapla
#3
(09-10-2017, Saat: 12:35)SimaWB Adlı Kullanıcıdan Alıntı:
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;

Gün geçtikçe bu forumu daha çok seviyorum.. Büyüksün üstad. Big Grin
Cevapla
#4
Merhabalar

Gerekli paylaşım güzel olmuş bir sorum olacaktı her winde çalışır mi 7,10 gibi

Teşekkürler
Cevapla
#5
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
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Wink Tüm forum arkadaşlarıma merhaba, sizi davet etmek istiyorum emailx45 8 1.442 05-11-2025, Saat: 20:53
Son Yorum: emailx45
  Windows mediaplayer ol2.dcu sorunu diseqc 1 574 28-01-2025, Saat: 11:54
Son Yorum: diseqc
  Windows Explorer dan delphi formuna dosya Drag&Drop işlemi örneği adelphiforumz 1 572 23-01-2025, Saat: 15:16
Son Yorum: yhackup
  Rest Server Windows Sunucuda Yayınlama ugorkem 6 1.293 14-08-2024, Saat: 18:48
Son Yorum: ugorkem
  Çalışan Exe Formuna Müdahale Etmek SercanTEK 4 1.298 01-03-2024, Saat: 22:51
Son Yorum: SercanTEK



Konuyu Okuyanlar: 1 Ziyaretçi