Hola a todos
Sigo con mi software de auditoría informática, ahora el problema que se me presentó fue al obtener las actualizaciones (updates) y parches (Hotfix) del sistema operativo
Estaba usando un componente de MiTEc, pero me dio incompatibilidad con sistemas de 64 bit, y por lo tanto ya tuve que desistir del mismo
Se que esos datos estan en el Registro de Windows, pero me pierdo un poco a la hora de sacarlos del regedit para ubicarlos en un ListView
Lo que necesito es la forma de obtener el listado de todas las actualizaciones (updates) y parches (Hotfix), ya sea por el Registro de Windows o por otra vía
Como obtener las actualizaciones y parches del sistema
Comenzado por
JoAnCa
, jun 27 2014 11:19
6 respuestas en este tema
#1
Escrito 27 junio 2014 - 11:19
#2
Escrito 30 junio 2014 - 10:55
Parace que no se entiende bien lo que quiero
La clave del Registro es:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates
En esa clave se almacena cada software que se actualiza como clave y sus actualizaciones como sublaves, y en los datos (a la derecha) el nombre de la actualizacion, fecha, tipo (hotfix o update), etc
Mas bien la pregunta podria ser, como leer esta clave del Registro
La clave del Registro es:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates
En esa clave se almacena cada software que se actualiza como clave y sus actualizaciones como sublaves, y en los datos (a la derecha) el nombre de la actualizacion, fecha, tipo (hotfix o update), etc
Mas bien la pregunta podria ser, como leer esta clave del Registro
#3
Escrito 30 junio 2014 - 01:03
Pues se entiende y yo usaría la unidad TRegistry para hacer un bucle con ReadString() para recorrer las claves del registro.
Recuerdo que alguna vez hice un componente para leer el registro de windows y colocar las llaves en un treeview, voy a ver si aún lo tengo, se llama RegistryEditor, estaba en éste hilo pero está dañado
Saludos
Recuerdo que alguna vez hice un componente para leer el registro de windows y colocar las llaves en un treeview, voy a ver si aún lo tengo, se llama RegistryEditor, estaba en éste hilo pero está dañado
Saludos
#5
Escrito 01 julio 2014 - 09:48
Ahora, con un poco de tiempo, te muestro un ejemplo para leer esa clave y subclaves encontrando las actualizaciones escritas en el registro de windows.
Debe ejecutarse como administrador, al menos en Win8 que es donde lo he escrito y probado.
Nota: El fuente de la unit RegEx lo encuentras aquí.
Saludos.
Debe ejecutarse como administrador, al menos en Win8 que es donde lo he escrito y probado.
delphi
program Updates; {$APPTYPE CONSOLE} uses SysUtils, Windows, RegEx; function ListRegAction(hKey0: HKEY; Path, Name: PCHAR; KeyType: integer; VData: PBYTE; Size: DWORD): integer; stdcall; begin if KeyType = -1 then WriteLn(Name); if (KeyType = REG_EXPAND_SZ) or (KeyType = REG_SZ) or (KeyType = REG_MULTI_SZ) then if lstrcmp(Name, 'ThisVersionInstalled') = 0 then begin if (PCHAR(VData) = 'Y') or (PCHAR(VData) = 'y') then WriteLn('Instalado') else WriteLn('No Instalado'); end; Result:= 0; end; begin ScanRegistry('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates', '', @ListRegAction, List or SubKeys, nil, false); ReadLn; end.
Nota: El fuente de la unit RegEx lo encuentras aquí.
Saludos.
#6
Escrito 02 julio 2014 - 07:34
Muchas gracias por la ayuda,
Con eso aprendí más a manipular el Registro de windows, no obstante ya habia encontrado una solución un poco mas sencilla, pero quizas se pueda optimizar un poco, pues lo hice ensayando hasta que me saliera lo que quería y todavía no lo he optimizado
De esta forma me sale bien lo que quiero
Donde esta lo de configurar el codigo delphi? no lo veo
Con eso aprendí más a manipular el Registro de windows, no obstante ya habia encontrado una solución un poco mas sencilla, pero quizas se pueda optimizar un poco, pues lo hice ensayando hasta que me saliera lo que quería y todavía no lo he optimizado
delphi
procedure TfrmAuditor.btnUpdatesClick(Sender: TObject); const Updates = '\SOFTWARE\Microsoft\Updates'; var i,j :integer; Registro :TRegistry; ListSoft, LsAct, LsValores :TStringList; ListItem :TListItem; Tipo, Desc, Fabric :String; begin Screen.Cursor:= crHourGlass; lblResult.Caption:='Parches y Actualizaciones Instalados'; btnMasDetalles.Enabled:=False; CualBoton:=8; {Inicializar el ListView} with lvResultados do begin Clear; Columns.Clear; with Columns.Add do begin Caption:='Software'; Width:=170; end; with Columns.Add do begin Caption:='Actualización'; Width:=80; end; with Columns.Add do begin Caption:='Tipo'; Width:=60; end; with Columns.Add do begin Caption:='Descripción'; Width:=350; end; end; Registro:=TRegistry.Create; ListSoft:=TStringList.Create; //Nombre de la Aplicacion LsAct:=TStringList.Create; //Nombre de la actualizacion LsValores:=TStringList.Create; //Valores with Registro do begin RootKey:=HKEY_LOCAL_MACHINE; OpenKey(Updates, False); GetKeyNames(ListSoft); for i:=0 to ListSoft.Count-1 do begin OpenKey(Updates + '\' + ListSoft.Strings[i], False); GetKeyNames(LsAct); ListItem:=lvResultados.Items.Add; ListItem.Caption:=ListSoft.Strings[i]; for j:=0 to LsAct.Count-1 do begin ListItem:=lvResultados.Items.Add; ListItem.SubItems.Add(LsAct.Strings[j]); //--- Obtener los Valores --- OpenKey(Updates + '\'+ ListSoft.Strings[i] +'\'+ LsAct.Strings[j], False); GetValueNames(LsValores); if LsValores.IndexOf('ReleaseType') <> -1 then Tipo:=Registro.ReadString(LsValores.Strings[LsValores.IndexOf('ReleaseType')]) else Tipo:=''; if LsValores.IndexOf('PackageName') <> -1 then Desc:=Registro.ReadString(LsValores.Strings[LsValores.IndexOf('PackageName')]) else Desc:=''; ListItem.SubItems.Add(Tipo); ListItem.SubItems.Add(Desc); end; end; end; ListSoft.Free; LsAct.Free; Registro.CloseKey; Registro.Destroy; Screen.Cursor:= crDefault; end;
De esta forma me sale bien lo que quiero
Donde esta lo de configurar el codigo delphi? no lo veo
#7
Escrito 02 julio 2014 - 09:29
Donde esta lo de configurar el codigo delphi? no lo veo
[nobbc][code=delphi][/code][/nobbc]
Saludos.