Start or Stop a MSSQLServer service with Delphi

Los 2 ejemplos disponen de todo el código que he utilizado para los métodos que aquí os pongo. En mi caso lo que yo quiero hacer es parar el servicio de SQLServer de un servidor (con Windows Server). Para ello, debemos parar el servicio SQLSERVERAGENT y luego una vez parado éste, parar el servicio MSSQLSERVER. Para iniciarlo otra vez, debemos hacer el camino opuesto y primero iniciar el MSSQLSERVER y luego el SQLSERVERAGENT.

Aquí os dejo el código fuente utilizando la unit TServiceManager de marc Dürst. Además podemos encontrar información de ésta unit en el siguiente enlace.
- Iniciar el servicio:
procedure StartSQLServer();
var
i: integer;
begin
//Iniciar un altre cop els serveis
Log('Starting Service MSSQLSERVER');
while ServiceManager2.ServiceStopped do
begin
mmolog.Lines.Add('.');
Sleep(defTime);
i := 0;
while i < timeout do
begin
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Inc(i);
Application.ProcessMessages;
end;
ServiceManager2.StartService;
Sleep(defTime);
end;
while not ServiceManager2.ServiceRunning do
begin
mmolog.Lines.Add('.');
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Application.ProcessMessages;
end;
if ServiceManager2.ServiceRunning then
begin
Log('Service Started MSSQLSERVER');
Sleep(defTime);
Log('Starting Service SQLSERVERAGENT');
while ServiceManager1.ServiceStopped do
begin
mmolog.Lines.Add('.');
Sleep(defTime);
i := 0;
while i < timeout do
begin
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Inc(i);
Application.ProcessMessages;
end;
ServiceManager1.StartService;
Sleep(defTime);
end;
while not ServiceManager1.ServiceRunning do
begin
mmolog.Lines.Add('.');
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Application.ProcessMessages;
end;
if ServiceManager1.ServiceRunning then
begin
Log('Service Started SQLSERVERAGENT');
end;
end;
Log('Status Services SQLSERVERAGENT: ' + BoolToStr(ServiceManager1.ServiceRunning) + ' MSSQLSERVER: ' + BoolToStr(ServiceManager2.ServiceRunning));
end;
- Parar el servicio:
procedure StopSQLServer();
var
status: DWORD;
i: integer;
begin
//Primer hem d'aturar el SQLSERVERAGENT
status := ServiceGetStatus(GetComputerNetName(), 'SQLSERVERAGENT');
Log('Getting status from service SQLSERVERAGENT -> ' + GetTextStatus(status));
ServiceManager1.Connect(PAnsiChar(name));
ServiceManager1.OpenServiceConnection('SQLSERVERAGENT');
status := ServiceGetStatus(GetComputerNetName(), 'MSSQLSERVER');
Log('Getting status from service MSSQLSERVER -> ' + GetTextStatus(status));
ServiceManager2.Connect(PAnsiChar(name));
ServiceManager2.OpenServiceConnection('MSSQLSERVER');
Log('Stopping Service SQLSERVERAGENT');
while ServiceManager1.ServiceRunning do
begin
mmolog.Lines.Add('.');
Sleep(defTime);
i := 0;
while i < timeout do
begin
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Inc(i);
Application.ProcessMessages;
end;
ServiceManager1.StopService;
Sleep(defTime);
end;
while not ServiceManager1.ServiceStopped do
begin
mmolog.Lines.Add('.');
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Application.ProcessMessages;
end;
if ServiceManager1.ServiceStopped then
begin
Log('Service Stopped SQLSERVERAGENT');
Sleep(defTime);
Log('Stopping Service MSSQLSERVER');
while ServiceManager2.ServiceRunning do
begin
mmolog.Lines.Add('.');
Sleep(defTime);
i := 0;
while i < timeout do
begin
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Inc(i);
Application.ProcessMessages;
end;
ServiceManager2.StopService;
Sleep(defTime);
end;
while not ServiceManager2.ServiceStopped do
begin
mmolog.Lines.Add('.');
mmolog.Lines[mmolog.Lines.count - 1] := mmolog.Lines[mmolog.Lines.count - 1] + '.';
Sleep(defTime);
Application.ProcessMessages;
end;
if ServiceManager2.ServiceStopped then
Log('Service Stopped MSSQLSERVER');
end;
Log('Status Services SQLSERVERAGENT: ' + BoolToStr(ServiceManager1.ServiceStopped) + ' MSSQLSERVER: ' + BoolToStr(ServiceManager2.ServiceStopped));
end;
Para la utilización del TServiceManager además hay que crear los objetos:
uses
ServiceManager, WinSvc;
procedure Destroy();
begin
FreeAndNil(ServiceManager1);
FreeAndNil(ServiceManager2);
FreeAndNil(IniFile);
end;
procedure Create();
begin
ServiceManager1 := TServiceManager.Create();
ServiceManager2 := TServiceManager.Create();
end;
- Enlaces de interés:
Get Computer name.
Comments
Post a Comment