Jump to content


Photo

Como obtener las actualizaciones y parches del sistema


  • Please log in to reply
6 replies to this topic

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 776 posts
  • LocationPinar del Río, Cuba

Posted 27 June 2014 - 11:19 AM

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


  • 0

#2 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 776 posts
  • LocationPinar del Río, Cuba

Posted 30 June 2014 - 10:55 AM

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  :undecided:




  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 30 June 2014 - 01:03 PM

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
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 30 June 2014 - 01:08 PM

Quizás esto te de alguna idea.

Saludos.
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 01 July 2014 - 09:48 AM

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.

delphi
  1. program Updates;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils, Windows, RegEx;
  7.  
  8.  
  9. function ListRegAction(hKey0: HKEY; Path, Name: PCHAR; KeyType: integer; VData: PBYTE; Size: DWORD): integer; stdcall;
  10. begin
  11.   if KeyType = -1 then WriteLn(Name);
  12.   if (KeyType = REG_EXPAND_SZ) or (KeyType = REG_SZ) or (KeyType = REG_MULTI_SZ) then
  13.     if lstrcmp(Name, 'ThisVersionInstalled') = 0 then
  14.     begin
  15.       if (PCHAR(VData) = 'Y') or (PCHAR(VData) = 'y') then
  16.         WriteLn('Instalado')
  17.       else WriteLn('No Instalado');
  18.     end;
  19.   Result:= 0;
  20. end;
  21.  
  22.  
  23. begin
  24.   ScanRegistry('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates', '', @ListRegAction, List or SubKeys, nil, false);
  25.   ReadLn;
  26. end.

Nota: El fuente de la unit RegEx lo encuentras aquí.


Saludos.
  • 0

#6 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 776 posts
  • LocationPinar del Río, Cuba

Posted 02 July 2014 - 07:34 AM

Muchas gracias por la ayuda,  (y)
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
  1. procedure TfrmAuditor.btnUpdatesClick(Sender: TObject);
  2. const
  3.   Updates = '\SOFTWARE\Microsoft\Updates';
  4.  
  5. var
  6.   i,:integer;
  7.   Registro            :TRegistry;
  8.   ListSoft, LsAct,
  9.   LsValores            :TStringList;
  10.   ListItem            :TListItem;
  11.   Tipo, Desc, Fabric  :String;
  12.  
  13. begin
  14.   Screen.Cursor:= crHourGlass;
  15.   lblResult.Caption:='Parches y Actualizaciones Instalados';
  16.   btnMasDetalles.Enabled:=False;
  17.   CualBoton:=8;
  18.   {Inicializar el ListView}
  19.   with lvResultados do
  20.   begin
  21.     Clear; Columns.Clear;
  22.     with Columns.Add do
  23.     begin
  24.       Caption:='Software';
  25.       Width:=170;
  26.     end;
  27.     with Columns.Add do
  28.     begin
  29.       Caption:='Actualización';
  30.       Width:=80;
  31.     end;
  32.     with Columns.Add do
  33.     begin
  34.       Caption:='Tipo';
  35.       Width:=60;
  36.     end;
  37.     with Columns.Add do
  38.     begin
  39.       Caption:='Descripción';
  40.       Width:=350;
  41.     end;
  42.   end;
  43.  
  44.   Registro:=TRegistry.Create;
  45.   ListSoft:=TStringList.Create;    //Nombre de la Aplicacion
  46.   LsAct:=TStringList.Create;      //Nombre de la actualizacion
  47.   LsValores:=TStringList.Create;  //Valores
  48.  
  49.   with Registro do
  50.     begin
  51.     RootKey:=HKEY_LOCAL_MACHINE;
  52.     OpenKey(Updates, False);
  53.     GetKeyNames(ListSoft);
  54.  
  55.     for i:=0 to ListSoft.Count-1 do
  56.     begin
  57.       OpenKey(Updates + '\' + ListSoft.Strings[i], False);
  58.       GetKeyNames(LsAct);
  59.  
  60.       ListItem:=lvResultados.Items.Add;
  61.       ListItem.Caption:=ListSoft.Strings[i];
  62.       for j:=0 to LsAct.Count-1 do
  63.       begin
  64.         ListItem:=lvResultados.Items.Add;
  65.         ListItem.SubItems.Add(LsAct.Strings[j]);
  66.  
  67.         //--- Obtener los Valores ---
  68.         OpenKey(Updates + '\'+ ListSoft.Strings[i] +'\'+ LsAct.Strings[j], False);
  69.         GetValueNames(LsValores);
  70.  
  71.         if LsValores.IndexOf('ReleaseType') <> -1 then
  72.           Tipo:=Registro.ReadString(LsValores.Strings[LsValores.IndexOf('ReleaseType')])
  73.         else
  74.           Tipo:='';
  75.         if LsValores.IndexOf('PackageName') <> -1 then
  76.           Desc:=Registro.ReadString(LsValores.Strings[LsValores.IndexOf('PackageName')])
  77.         else
  78.           Desc:='';
  79.  
  80.         ListItem.SubItems.Add(Tipo);
  81.         ListItem.SubItems.Add(Desc);
  82.       end;
  83.     end;
  84.     end;
  85.  
  86.   ListSoft.Free; LsAct.Free;
  87.   Registro.CloseKey;
  88.   Registro.Destroy;
  89.   Screen.Cursor:= crDefault;
  90. end;

De esta forma me sale bien lo que quiero
(h)


:| Donde esta lo de configurar el codigo delphi? no lo veo  ^o|
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 02 July 2014 - 09:29 AM

Donde esta lo de configurar el codigo delphi? no lo veo  ^o|


[nobbc][code=delphi][/code][/nobbc]


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.