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 10-05-2022
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
WMI y errores que cuelgan toda la aplicación

Buenas,

Estoy teniendo problemas con el método ‘ConnectServer’ de la interfaz ‘ISWbemLocator’. Precisamente lo que pasa es que si la máquina no tiene levantado el servicio este se cuelga y hace que se cuelgue toda la aplicación. Esto independientemente del Windows que tenga la máquina (puede ser Windows Server, Windows 7 o Windows 10)

He visto en la documentación de Microsoft que esto debería devolver un código de error, pero como comenté se cuelga y no devuelve nada. Mirando los componentes de Neftalí veo que tampoco tiene atrapado el error como corresponde.

El muchos foros como por ejemplo ‘Stack Overflow’ hablan de esto pero todas las soluciones que proponen ninguna funciona. La única que se me ocurre es antes de hacer la conexión verificar si el servicio está levantado y ahí atrapar el error. Aunque podría no funcionar en una máquina remota.

Si saben de alguna otra forma sería bueno que lo comenten, ya que los otros métodos que se usan para levantar los datos de lo que se quiere también tienen el mismo problema de dejar colgada la aplicación si por alguna razón no está activo el servicio de WMI.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno

Última edición por elrayo76 fecha: 10-05-2022 a las 03:25:36.
Responder Con Cita
  #2  
Antiguo 10-05-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si lo pruebas en local, verás que es fácil obtener un error de tipo EOleException si el servicio no está disponible. Incluso el mensaje que obtienes te lo deja claro.
Baja el servicio desde la administración de servicios y luego ponlo deshabilitado, para evitar que se arranque automáticamente cuando hagas la petición (ya que por defecto tiene macado araque automático.

Ten en cuenta que al "bajar" el servicio, es posible que se paren otros que dependen de él y que luego tendrás que arrancar manualmente (o reiniciar la máquina para que se vuelvan a arrancar automáticamente).

Si pruebas con un código como este:

Código Delphi [-]
uses
  SysUtils, ActiveX, ComObj, Variants, VCL.Forms, WinAPI.Windows, VCL.Dialogs;
...    


var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
begin  
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  try
    FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  except
    on E:exception do begin

      MessageDlg('Error, no se puede conectar al servicio de wmi. ' + sLineBreak +
                 '(' + E.ClassName + ') ' + E.Message,
                 mtError, [mbOK], 0);
      Exit;
    end;
  end;
...

Verás que al ejecutarlo con el servicio parado (y deshabilitado) te genera el siguiente error:

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 10-05-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Otro tema es que al intentar arrancar el servicio (que la petición de conexión lo intenta "levantar") se te esté quedando bloqueado por otros temas.
Necesidad de permisos, temas de red, elevación de permisos, servicio no disponible o "roto",...

Ya tendrías que averiguar, ese bloqueo o "cuelgue" porqué está pasando.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 15-05-2022
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Buenas, perdón por la demora en responder pero estuve de viaje estos dos últimos días por trabajo.


Neftalí, esto es lo que hago para conectar con WMI.


Código Delphi [-]
var
  objLocator:  ISWbemLocator;

begin
  FConnected := False;
  objLocator := CoSWbemLocator.Create;

  try
      // Hace la conexión del WMI con 'root\cimv2'.
      FServices := objLocator.ConnectServer(FHost, GetRoot, FUser, FPassword, '', '', 0, nil);
  except
    on e: Exception do  
      MessageError(SysErrorMessage(GetLastError));
  end;


El tema es que si le doy pausa o lo detengo al servicio no llega nunca al error. Se queda colgado en donde se carga la variable FService


¿Tendrá algo que ver la forma en que llamo a la clase CoSWbemLocator? igual veo que es como lo haces tú en las GLibWMI.


Como ya comente antes, en algunos otros foros preguntan por este mismo problema y ninguno puede dar una solución al respecto. Por eso mismo es que pienso que hay que ver por otro lado si el servicio esta corriendo antes de intentar la conexión.



Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
"Asynchronous socket error 10061." Mis clientes se cuelgan Boris Internet 2 13-09-2007 16:59:17
Detectar clic del ratón en toda la aplicación zurech Varios 3 05-02-2007 19:07:01
Los ahorros de toda una vida Bicho Humor 1 07-11-2006 03:27:26
refresh a toda la tabla jzginez Firebird e Interbase 3 12-09-2005 17:27:49
Controlar pulsacion de una tecla desde toda la aplicacion Sick boy OOP 5 21-05-2004 17:30:48


La franja horaria es GMT +2. Ahora son las 22:32:12.


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