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 30-05-2017 23: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 19: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 Notevi 02-06-2017 20: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 21:54:25

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

Casimiro Notevi 02-06-2017 23: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 11:22:56.

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