FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Obtener version del Service Pack de Windows
Hola amigos,
La cuestion es que estoy desarrollando una aplicacion capaz de determinar si una computadora es actualizada con regularidad, si está desactualizada y cosas así leyendo con WUA (Windows Update Client Api) las actualizaciones instaladas y comparando contra una BD de actualizaciones portable actualizada para determinar cuales actualizaciones no tiene el cliente etc. La verdad es que la tengo casi terinada pero ahora necesito la version del Service Pack de Windows pero ojo, no puede ser con WMI ni con QuickFix_Engineering que puede darse el caso no esten instaladas y/o habilitadas en la PC, por eso necesito una via que sea mediante alguna funcion super escondida del API de Windows o algo asi :P. Por favor si alguien sabe de esto que me eche una mano. Cuando la termine la pienso publicar para que la gente vea y estudie el codigo fuente y lo reutilize en otras labores. |
#3
|
||||
|
||||
Algo como esto se podria uttilizar pero tengo temor de que en versiones de Windows XP u otras que no este instalada la WMI me falle la aplicacion.
Código:
procedure GetWin32_OperatingSystemInfo; const wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; //Todas las propiedades y metodos de Win32_OperatingSystem aqui: //Win32_OperatingSystem http://msdn.microsoft.com/en-us/library/windows/desktop/aa394239%28v=vs.85%29.aspx FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin Writeln(Format('Caption = %s', [FWbemObject.CSDVersion]));// String Writeln(''); FWbemObject:=Unassigned; end; end; |
#4
|
||||
|
||||
Roman, resulta ser que he probado tu funcion y me devuelve "Service Pack 3" cuando en realidad tengo Windows 7 Service Pack 1. El mismo resultado me lo esta devolviendo otro componente de la Jedi que al pareces utiliza esa misma forma. Con la funcion que puse mas arriba si me devuelve Service Pack 1 (que es el que tengo instalado y el que sale en las propiedades del sistema). No se que será lo que sucede pero por el momento voy a resolver con WMI hasta que encuentre otra vía. Gracias de todas formas y bueno si tienes alguna idea de por que puede estar sucediendo esto te lo agradecería.
Saludos... |
#5
|
||||
|
||||
¡Vaya! Pues ¡qué raro! En mi caso da el valor correcto. También he visto que algunos lo toman del registro de windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion de la clave CSDVersion. // Saludos |
#6
|
||||
|
||||
Si pero bueno para leer dicha clave no necesito tener privilegios de administrador? o puedo simplemente leerlo sin problemas ?
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Service pack Delphi 4 | martin17476 | Varios | 2 | 03-09-2008 09:12:42 |
Service pack 3 para delphi6 | IVAND | Varios | 1 | 28-07-2008 20:31:11 |
Tendremos Service Pack 3 para Windows XP | marcoszorrilla | Noticias | 1 | 27-05-2007 22:37:52 |
Service Pack 1 2 3 SQL Server 2000 | Marianowo | SQL | 0 | 08-02-2005 21:34:58 |
Service Pack para Interbase 7.1 | jachguate | Noticias | 0 | 12-11-2003 23:02:28 |
|