NT Servislerini Kontrollü bir şekilde başlat-durdur

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

NT Servislerini Kontrollü bir şekilde başlat-durdur

Mesaj gönderen vkamadan »

Merhaba ,
DelphiTurk KodBank tan bulduğum ve çok işime yarayan 2 fonksiyonu paylaşmak istedim.

Kod: Tümünü seç

USES ShellApi, WinSvc;


//Servisi Başlatır
function StartNTService(const ServiceName: string): Boolean;
var
 SCM: SC_HANDLE;
 ServiceHandle: SC_HANDLE;
 Res: Boolean;
 Temp: PChar;
 Status: SERVICE_STATUS;
 Err: Integer;
begin
  Result := False;
  SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCM = 0 then
   raise Exception.Create('Servis Kontrol Yöneticisi açılamadı. Hata: ' + SysErrorMessage(getLastError));
  ServiceHandle := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
  if ServiceHandle = 0 then
  begin
    CloseServiceHandle(SCM);
    raise Exception.Create(ServiceName + ' isimli servis açılamadı. Hata: ' + SysErrorMessage(getLastError));
  end;
  Res := StartService(ServiceHandle, 0, Temp);
  if Res then
  begin
    Res := QueryServiceStatus(ServiceHandle, Status);
    while (Res) do
    begin
      if Status.dwCurrentState = SERVICE_RUNNING then
      begin
        Result := True;
        Break;
      end else if Status.dwCurrentState = SERVICE_STOPPED then
      begin
        Result := False;
        Break;
      end;
      QueryServiceStatus(ServiceHandle, Status);
    end;
  end else begin
    Err := GetLastError;
    if  Err <> ERROR_SERVICE_ALREADY_RUNNING then
    raise Exception.Create(ServiceName + ' isimli servis başlatılamadı. Hata:' + SysErrorMessage(Err));
  end;
  CloseServiceHandle(SCM);
  if not Result then
    raise Exception.Create(ServiceName + ' isimli servis başlatılamadı');
 end;

// Servisi durdurur
function StopNTService(const ServiceName: string): Boolean;
var
 SCM: SC_HANDLE;
 ServiceHandle: SC_HANDLE;
 Res: Boolean;
 Status: SERVICE_STATUS;
begin
  Result := False;
  SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCM = 0 then
   raise Exception.Create('Servis Kontrol Yöneticisi açılamadı');
  ServiceHandle := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
  if ServiceHandle = 0 then
  begin
    CloseServiceHandle(SCM);
    raise Exception.Create(ServiceName + ' isimli servis açılamadı. Hata: ' + SysErrorMessage(getLastError));
  end;
  Res := ControlService(ServiceHandle, SERVICE_CONTROL_STOP, Status);
  if not Res then
  begin
    if GetLastError <> ERROR_SERVICE_NOT_ACTIVE then
      raise Exception.Create('Servis durdurulamadı');
  end else Result := True;
end;
Bu fonksiyonlar çok hızlı çalışıyorlar, ayrıca işlem sonucunu öğrenip duruma göre program akış denetimini sağlayabiliyorsunuz.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 115
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: NT Servislerini Kontrollü bir şekilde başlat-durdur

Mesaj gönderen yhackup »

Merhaba peki bunu bir Wndows Hizmetinden yapabilir miyiz ?
Çaylak Delphici :D

Yakup ULUTAŞ
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: NT Servislerini Kontrollü bir şekilde başlat-durdur

Mesaj gönderen SimaWB »

File -> New -> Other -> Delphi Projects -> Service Application
:D
There's no place like 127.0.0.1
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 115
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: NT Servislerini Kontrollü bir şekilde başlat-durdur

Mesaj gönderen yhackup »

SimaWB yazdı:File -> New -> Other -> Delphi Projects -> Service Application
:D
Yanlış anladınız,
Bir hizmet başka bir hizmete müdahale edebilir mi gibisinden bir soruydu, ama yaptım oldu. :bravo:
Çaylak Delphici :D

Yakup ULUTAŞ
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: NT Servislerini Kontrollü bir şekilde başlat-durdur

Mesaj gönderen SimaWB »

Siz de beni yanlış anlamışsınız.
yhackup yazdı:ama yaptım oldu. :bravo:
İşte tam bunu demek istiyordum. Basitçe kendiniz test edebilirdiniz buraya sormadan evvel ;)
Affınıza mahcuben...
There's no place like 127.0.0.1
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 115
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: NT Servislerini Kontrollü bir şekilde başlat-durdur

Mesaj gönderen yhackup »

SimaWB yazdı:Siz de beni yanlış anlamışsınız.
yhackup yazdı:ama yaptım oldu. :bravo:
İşte tam bunu demek istiyordum. Basitçe kendiniz test edebilirdiniz buraya sormadan evvel ;)
Affınıza mahcuben...
Evet yanlış anlamışım :(

Ama buraya sormasam 2006 açılan miss gibi konu unutulmuş olacaktı konuyu hareketlendirmiş oldum :D
Çaylak Delphici :D

Yakup ULUTAŞ
Cevapla