Bir NT Servisi Açma-Kapatma vs..

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ı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Bir NT Servisi Açma-Kapatma vs..

Mesaj gönderen lazio »

uses a ShellApi, WinSvc yazıyoruz..

Servisi Başlat

Kod: Tümünü seç

procedure TForm1.btnStartServiceClick(Sender: TObject);
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('InterBaseServer'), SERVICE_ALL_ACCESS);
  if ServiceHandle = 0 then
  begin
    CloseServiceHandle(SCM);
    raise Exception.Create('Interbase Servisi 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
        Break
      else
      if Status.dwCurrentState = SERVICE_STOPPED then
        Break;
      QueryServiceStatus(ServiceHandle, Status);
    end;
  end
  else
  begin
    Err := GetLastError;
    if  Err <> ERROR_SERVICE_ALREADY_RUNNING then
    raise Exception.Create('Interbase Servisi Başlatılamadı. Hata:' + SysErrorMessage(Err));
  end;
  CloseServiceHandle(SCM);
end;
Servisi Durdur

Kod: Tümünü seç

procedure TForm1.btnStopServiceClick(Sender: TObject);
var
 SCM: SC_HANDLE;
 ServiceHandle: SC_HANDLE;
 Res: Boolean;
 Status: SERVICE_STATUS;
begin
  SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCM = 0 then
    raise Exception.Create('Servis Yöneticisi Açılamadı');
  ServiceHandle := OpenService(SCM, PChar('InterBaseServer'), SERVICE_ALL_ACCESS);
  if ServiceHandle = 0 then
  begin
    CloseServiceHandle(SCM);
    raise Exception.Create('Interbase Servisi Açılamadı. Hata: ' + SysErrorMessage(getLastError));
  end;
  Res := ControlService(ServiceHandle, SERVICE_CONTROL_STOP, Status);
  if not Res then
    if GetLastError <> ERROR_SERVICE_NOT_ACTIVE then
      raise Exception.Create('Servis Durdurulamadı');
end;
Servis Durumu

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;

procedure TForm1.btnStatusServiceClick(Sender: TObject);
var
  Status: SERVICE_STATUS;
begin
  Status := GetServiceStatus('InterBaseServer');
  case Status.dwCurrentState of
    1 : ShowMessage('Stopped');
    2 : ShowMessage('Start Pending');
    3 : ShowMessage('Stop Pending');
    4 : ShowMessage('Running');
    5 : ShowMessage('Continue Pending');
    6 : ShowMessage('Pause Pending');
    7 : ShowMessage('Paused');
  end;
end;
Servisi Kaldır

Kod: Tümünü seç

procedure TForm1.btnRemoveServiceClick(Sender: TObject);
var
 SCM: SC_HANDLE;
 ServiceHandle: SC_HANDLE;
begin
  SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCM = 0 then
    raise Exception.Create('Servis Yöneticisi Açılamadı.');
  ServiceHandle := OpenService(SCM, PChar('InterbaseServer'), SERVICE_ALL_ACCESS);
  if ServiceHandle = 0 then
  begin
    CloseServiceHandle(SCM);
    raise Exception.Create('Servis Açılamadı. Hata: ' + SysErrorMessage(getLastError));
  end;
  if not DeleteService(ServiceHandle) then
    raise Exception.Create('Servis Silinemedi. Hata: ' + SysErrorMessage(getLastError));
  CloseServiceHandle(SCM);
end;
Servis Yükleme

Kod: Tümünü seç


procedure TForm1.btnInstallServiceClick(Sender: TObject);
var
 SCM: SC_HANDLE;
 ServiceHandle: SC_HANDLE;
 dwStartType: DWord;
begin
  dwStartType := 1;
  SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCM = 0 then
    raise Exception.Create('Servis Yöneticisi Açılamadı.');
  ServiceHandle := CreateService(SCM, PChar('InterBaseServer'), PChar('InterBase'), SERVICE_CHANGE_CONFIG,
                                 SERVICE_WIN32_OWN_PROCESS, dwStartType, SERVICE_ERROR_NORMAL, PChar('c:\ib.exe'), nil, nil, nil, nil, nil);
  if ServiceHandle = 0 then
  begin
    CloseServiceHandle(SCM);
    raise Exception.Create('Servis Yükle Hatası: ' + SysErrorMessage(GetLastError));
  end;
  CloseServiceHandle(SCM);
  CloseServiceHandle(ServiceHandle);
end;
DeveloperToolKit

..::|YeşilMavi|::..
Cevapla