Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2005
Xulles Xulles is offline
Registrado
 
Registrado: jun 2005
Posts: 1
Poder: 0
Xulles Va por buen camino
Question Saber si un servicio está en marcha

He implementado un servicio en Delphi (Service Application) y necesito alguna forma de saber si mi servicio está en marcha o no. De esta manera, si detecto que no está en marcha, puedo arrancarlo. ¿Existe alguna manera para saber si un servicio en concreto está en marcha? ¿O saber el estado en que se encuentra (activo, inactivo, en pausa, etc...)?
Responder Con Cita
  #2  
Antiguo 02-06-2005
S.M.S. S.M.S. is offline
Miembro
 
Registrado: jun 2003
Ubicación: España
Posts: 56
Poder: 21
S.M.S. Va por buen camino
Obtener el estado de un servicio de Windows

Esto tengo localizado, aunque no lo probé:

Con la siguiente función obtendremos el estado de un servicio del Sistema Operativo (Iniciado, Detenido, Pausado, Iniciando, Deteniendo). Para ello añadiremos un formulario, dentro de éste colocaremos dos cuadros de texto (TEdit) y un botón (TButton). Un cuadro de texto será para especificar el nombre del servicio a comprobar y el otro para especificar la máquina en la que se comprobará. Puesto que esta función utiliza otra de la API de Windows llamada "OpenService", la cual se haya en la DLL: "advapi32.dll" , en el USES de la unidad colocaremos "WinSvc":

Código Delphi [-]
unit UnidadMenuPrincipal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, WinSvc, StdCtrls;

type
  TformMenuPrincipal = class(TForm)
    txtServicio: TEdit;
    txtPC: TEdit;
    bComprobar: TButton;
    procedure bComprobarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  formMenuPrincipal: TformMenuPrincipal;

implementation

{$R *.dfm}


// obtiene el estado de un servicio
function estadoServicio(sPC, sServicio : string ) : string;
var
  schm, schs   : SC_Handle;
  ss     : TServiceStatus;
  dwStat : DWord;
begin
  dwStat := 0;
  schm := OpenSCManager(PChar(sPC), Nil, SC_MANAGER_CONNECT);
  if (schm > 0) then
  begin
    schs := OpenService(schm, PChar(sServicio), SERVICE_QUERY_STATUS);
    if (schs > 0) then
    begin
      if (QueryServiceStatus(schs, ss)) then
      begin
        dwStat := ss.dwCurrentState;
      end;
      CloseServiceHandle(schs);
    end;
    CloseServiceHandle(schm);
  end;
  case dwStat of
    0 : Result := 'No disponible';
    1 : Result := 'Detenido';
    2 : Result := 'Iniciando';
    3 : Result := 'Deteniendo';
    4 : Result := 'Iniciado';
    7 : Result := 'Pausado';
  else
    result := inttostr(dwstat);
  end;
end;


procedure TformMenuPrincipal.bComprobarClick(Sender: TObject);
begin
  showmessage (estadoServicio(txtPC.Text, txtServicio.Text))
end;

end.
Espero funcione. Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:55:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi