Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2005
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Poder: 0
Aldo Va por buen camino
Muchas gracias por tu dedicación, pero mucho me temo que no me ha valido. La verdad es que con algunas pequeñas diferencias, tu código se parece mucho al que tengo yo, pero sigo presentando el problema.
De hecho el llamado a esa función está en una aplicación desarrollada por mi empresa que es un Programador de tareas ( parecido al GBackSchd.exe ), pero con la diferencia que se pueden hacer tareas de distinta índole, más allá que hacer backups y restores de bases de datos.
Un tipo de tarea que se puede programar desde el programador de tareas es ejecutar otras aplicaciones y para que fucione correctamente, tiene en su configuración interna guardados el Usuario Administrador y su password, para que la aplicación invocada desde el programador de tareas se ejecute con los privilegios del Administrador.
Otra de las tareas es detener e iniciar servicios y es aquí concretamente donde presento problemas, porque cuando se va a obtener la lista de servicios instalados en el ordenador, falla el llamado a EnumServicesStatus.

Te agradezco tu colaboración, estoy investigando más.
Un saludo aldo
Responder Con Cita
  #2  
Antiguo 06-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿Echaste un vistazo a la descripción de la función en la página Web MSDN de Microsoft? Es de suponer que sí. En todo caso, lo que creo que ayudaría sería conocer el error que obtienes, porque dices que falla la llamada a la función, pero, no especificas qué error se produce. En fin, por ver si puede servir de algo, más que nada. Además se plantean en la página antes mencionada las funciones "EnumServicesStatusEx", "EnumServicesStatusW" y "EnumServicesStatusA"... ¿tal vez pudiera alguna de estas resolver el problema? Igual ya comprobaste que no...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 06-10-2005
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Poder: 0
Aldo Va por buen camino
Muchas gracias por tu tiempo. Pongo en este mensaje el código de mi función y explico donde falla y que error me dá.

Código Delphi [-]
 function ObtenerInfoServicios(Equipo : string; Tipos : TServiceTypes;
   IncluirInactivos : boolean; Lista : TObjectList):boolean;
 var
   hSCManager : SC_HANDLE;
   dwServiceType, dwServiceState: DWORD;
   pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
   Buffer : PArrayTEnumServiceStatus;
   i : integer;
   InfS : TInfoServicio;
 begin
   Lista.Clear;
   Result := False;
   // Abrimos service manager
   hSCManager := OpenSCManager(PChar(Equipo), nil, SC_MANAGER_ENUMERATE_SERVICE);
   if (hSCManager=0) then begin
     ChequeaError();
     Exit;
   end;
 
   lpResumeHandle := 0;
   New(Buffer);
   try
     dwServiceType:=SERVICE_WIN32;
     dwServiceState:=SERVICE_STATE_ALL;
 
     Result:=EnumServicesStatus( hSCManager, dwServiceType, dwServiceState, Buffer^[0],
       SizeOf(Buffer^), pcbBytesNeeded, lpServicesReturned, lpResumeHandle );
 
     // assume that our initial array was large enough to hold all
     // entries. add code to enumerate if necessary.
 
     // Procesar los servicios devueltos
     for i := 0 to lpServicesReturned-1 do begin
       InfS:=TInfoServicio.Create;
       InfS.ServiceName:=Buffer^.lpServiceName;
       InfS.DisplayName:=Buffer^[i].lpDisplayName;
       InfS.ServiceStatus:=Buffer^[i].ServiceStatus;
       Lista.Add(InfS);
     end;
 
   finally
     Result := true;
     Dispose(Buffer);
     CloseServiceHandle(hSCManager);
   end;
 end;
[i]
Falla en el llamado a EnumServicesStatus. El Código de error que dá es el 1783 y el mensaje de dicho error es El fragmento ha recibido datos incorrectos

Lo curioso es que en el resto de los S.O. no falla y funciona correctamente.

No sé si me puedes ayudar con esta información. Un Saludo Aldo

Última edición por dec fecha: 06-10-2005 a las 13:19:23. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #4  
Antiguo 06-10-2005
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Poder: 0
Aldo Va por buen camino
Perdona. Ya he visto que hay algunos cambios en la función y he hecho lo mismo que me habéis mandado en la primera respuesta y ya está todo solucionado.

Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 01:56:54.


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
Copyright 1996-2007 Club Delphi