Avatar billede kennethv Nybegynder
30. marts 2007 - 10:54 Der er 1 kommentar og
1 løsning

Hvordan finder man software som er installeret på en pc?

Hvordan er det muligt at finde software som er installeret på en pc? Jeg har en ide om at man skal gennemsøge reg-databasen for det, men hvordan gøre man det eller er der en anden måde man løser det problem på?
Avatar billede dkn Nybegynder
30. marts 2007 - 11:26 #1
Den bedste mulighed er at se efter det software hvor der også er fulgt en uninstaller med, det gør der jo så heldigvis også med meget.

Fra delphi3000:


The list of installed applications, we can read it of the Windows registry, in the key:


'\SOFTWARE\Microsoft\Windows\CurrentVersion\UNINSTALL'


In this example, we will fill a TMemo with the names of the applications installed in Windows, and also with the names of the executables that will make their unistall.

Add 'Registry in the uses of your form
Put a TMemo (Memo1) and a TButton (Button1) in your form
Put this code in the OnClick event of Button1:


procedure TForm1.Button1Click(Sender: TObject);

const CLAVE =
  '\SOFTWARE\Microsoft\Windows\CurrentVersion\UNINSTALL';

var
  reg    : TRegistry;
  Lista  : TStringList;
  Lista2 : TStringList;
  i,n    : integer;

begin
  {Creamos cosas temporales}
  {Create temporal things}
  reg    := TRegistry.Create;
  Lista  := TStringList.Create;
  Lista2 := TStringList.Create;

  {Cargamos todas las subkeys}
  {Load all the subkeys}
  with Reg do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey(CLAVE,false);
    GetKeyNames(Lista);
  end;

  {Cargamos todos los Nombres de valores}
  {Load all the Value Names}
  for i := 0 to Lista.Count -1 do
  begin
    reg.OpenKey(CLAVE + '\' +Lista.Strings[i],false);
    reg.GetValueNames(Lista2);

    {Mostraremos sólo los que tengan 'DisplayName'}
    {We will show only if there is 'DisplayName'}
    n:=Lista2.IndexOf('DisplayName');
    if (n <> -1) and (Lista2.IndexOf('UNINSTALLString')<>-1) then
    begin
      {DisplayName+UNINSTALLString}
      Memo1.Lines.Append ( reg.ReadString(Lista2.Strings[n])+'-'+
        reg.ReadString(Lista2.Strings[Lista2.IndexOf('UNINSTALLString')]) );
    end;
  end;
  {Liberamos temporales}
  {Free temporals}
  Lista.Free;
  Lista2.Free;
  reg.CloseKey;
  reg.Destroy;
end;
Avatar billede kennethv Nybegynder
30. marts 2007 - 12:02 #2
Denne løsning finder alt også selv sikkerhedsopdateringer, hvilket jeg ikke har behov for. Men jeg fandt en løsning på en anden måde. Windows selv har en måde at gøre det på:

%systemroot%\system32\wbem\wmic.exe /output:c:\productlog.csv product get name,vendor,version
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester