Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como saber el estado de un servicio en una IP REMOTA (https://www.clubdelphi.com/foros/showthread.php?t=91919)

Soa Pelaez 31-05-2017 00:06:12

Saber si un servicio esta corriendo en una IP REMOTA
 
Buenas tardes.

Hay alguna manera de saber si un servicio esta iniciado en una IP Remota a la cual debo conectarme pero solo si el servicio está iniciado, algo que sea rápido de comprobar y mi aplicación no demore tanto en abrir
Porque actualmente tengo un código que lo verifica pero se demora 30 segundos en saber si está iniciado y es demasiada espera para un usuario iniciar una aplicación.

Código Delphi [-]
// 26/02/2016 Verifica el estado del servicio, si esta ensendido, apagado, sin instalar, instalado ...
//sMachine --> IP Donde se verifica el servicio
//sService --> Nombre del servicio
//Si lo que retorna es diferente de 4 es porque el servicio no está corriendo
//Posibles resultados.
{******************************************}
  {*** Parameters: ***}
  {*** sService: specifies the name of the service to open
  {*** sMachine: specifies the name of the target computer
  {*** ***}
  {*** Return Values: ***}
  {*** -1 = Error opening service ***}
  {*** 1 = SERVICE_STOPPED ***}
  {*** 2 = SERVICE_START_PENDING ***}
  {*** 3 = SERVICE_STOP_PENDING ***}
  {*** 4 = SERVICE_RUNNING ***}
  {*** 5 = SERVICE_CONTINUE_PENDING ***}
  {*** 6 = SERVICE_PAUSE_PENDING ***}
  {*** 7 = SERVICE_PAUSED ***}
  {******************************************}
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
var
  SCManHandle, SvcHandle: SC_Handle;
  SS: TServiceStatus;
  dwStat: DWORD;
begin
  dwStat := 0;
  // Open service manager handle.
  SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);
  if (SCManHandle > 0) then
  begin
    SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS);
    // if Service installed
    if (SvcHandle > 0) then
    begin
      // SS structure holds the service status (TServiceStatus);
      if (QueryServiceStatus(SvcHandle, SS)) then
        dwStat := ss.dwCurrentState;
      CloseServiceHandle(SvcHandle);
    end;
    CloseServiceHandle(SCManHandle);
  end;
  Result := dwStat;

Gracias.

Soa Pelaez 02-06-2017 20:48:12

Como saber el estado de un servicio en una IP REMOTA
 
Buenas tardes.

Hay alguna manera de saber si un servicio esta iniciado en una IP Remota a la cual debo conectarme pero solo si el servicio está iniciado, algo que sea rápido de comprobar y mi aplicación no demore tanto en abrir
Porque actualmente tengo un código que lo verifica pero se demora 30 segundos en saber si está iniciado y es demasiada espera para un usuario iniciar una aplicación.

Código Delphi [-]
// 26/02/2016 Verifica el estado del servicio, si esta ensendido, apagado, sin instalar, instalado ...
//sMachine --> IP Donde se verifica el servicio
//sService --> Nombre del servicio
//Si lo que retorna es diferente de 4 es porque el servicio no está corriendo
//Posibles resultados.
{******************************************}
{*** Parameters: ***}
{*** sService: specifies the name of the service to open
{*** sMachine: specifies the name of the target computer
{*** ***}
{*** Return Values: ***}
{*** -1 = Error opening service ***}
{*** 1 = SERVICE_STOPPED ***}
{*** 2 = SERVICE_START_PENDING ***}
{*** 3 = SERVICE_STOP_PENDING ***}
{*** 4 = SERVICE_RUNNING ***}
{*** 5 = SERVICE_CONTINUE_PENDING ***}
{*** 6 = SERVICE_PAUSE_PENDING ***}
{*** 7 = SERVICE_PAUSED ***}
{******************************************}
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
var
SCManHandle, SvcHandle: SC_Handle;
SS: TServiceStatus;
dwStat: DWORD;
begin
dwStat := 0;
// Open service manager handle.
SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);
if (SCManHandle > 0) then
begin
SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS);
// if Service installed
if (SvcHandle > 0) then
begin
// SS structure holds the service status (TServiceStatus);
if (QueryServiceStatus(SvcHandle, SS)) then
dwStat := ss.dwCurrentState;
CloseServiceHandle(SvcHandle);
end;
CloseServiceHandle(SCManHandle);
end;
Result := dwStat;

Gracias.

Casimiro Noteví 02-06-2017 21:51:34

No crees un hilo nuevo para preguntar lo mismo que en el otro.
Y no olvides usar las etiquetas para el código.
Saludos.
PD: Los he unido.

Soa Pelaez 02-06-2017 22:54:25

Me disculpo es que no me deja eliminar el primer hilo.

Casimiro Noteví 03-06-2017 00:46:47

Cita:

Empezado por Soa Pelaez (Mensaje 517591)
Me disculpo es que no me deja eliminar el primer hilo.

Hola, es que no hay que eliminarlo, solamente debes escribir un nuevo post en el mismo hilo, tal y como he hecho, así se continua con el mismo ^\||/


La franja horaria es GMT +2. Ahora son las 20:58:38.

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