Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
32 bit 64 bit yüklü program listesi farklılıkları
#1
Question 
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes,
  System.Win.Registry,Winapi.Windows;

var
    MyList: TStringList;
    Plist: TStringList;
    MyRegistry: TRegistry;
    i: Integer;
    Str: string;

begin
     try
    { TODO -oUser -cConsole Main : Insert code here }

  MyRegistry:=TRegistry.Create;
  MyList:=TStringList.Create;
  Plist:=TStringList.Create;
  with MyRegistry do
  begin
    RootKey :=HKEY_LOCAL_MACHINE;
    if OpenKey(
      'Software\Microsoft\Windows\CurrentVersion\Uninstall',
      False)=True then GetKeyNames(MyList);
      CloseKey;

              for i:=0 to MyList.Count-1 do
              begin
                RootKey:=HKEY_LOCAL_MACHINE;
                OpenKey(
                  'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
                  MyList[i],
                  False);
                Str:=ReadString('DisplayName');
                if Str<>'' then
                  Plist.Add(ReadString('DisplayName'));
                 CloseKey;
              end;
  end;


            if Plist.Count>0 then
            begin
              Plist.SaveToFile(ExtractFilePath(ParamStr(0))+'\programlist.txt');
              FreeAndNil(Plist);
            end;

   except

    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Bu kodla windowstaki yüklü program listesini bir metin belgesine kaydediyorum.
normalde Win32\Debug içerisinde programı çalıştırdığımda kaydetiği listede 226 yüklü program buldu içerisinde bende yüklü olan winrarı göremedim target platformdan 64 bit ekledim birde 64 bit olarak derledim 64 bit olarak derlediğim exe yi çalıştırdığımda 152 yüklü program buldu ve winrar da bunun içerisindeydi aynı kodla 32 bit derlenen programın çıkardığı sonuç farklı 64 bit derlenen exe nin çıkardığı sonuç farklı 64 bit derlenen 64 bit program listesini 32 bit derlenen 32 yüklü program listesini verdi.
32 bit olarak 64 bit yüklü programların listesini nasıl alabilirim?

“Do. Or do not. There is no try.”
Cevapla
#2
Kodları paylaşabilir misin?
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#3
Question 
(19-10-2016, Saat: 00:44)engerex Adlı Kullanıcıdan Alıntı: Kodları paylaşabilir misin?

Kodlar görünüyor ilk gönderimde yine ekleyeyim

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
 System.SysUtils,
 System.Classes,
 System.Win.Registry,Winapi.Windows;

var
   MyList: TStringList;
   Plist: TStringList;
   MyRegistry: TRegistry;
   i: Integer;
   Str: string;

begin
    try
   { TODO -oUser -cConsole Main : Insert code here }

 MyRegistry:=TRegistry.Create;
 MyList:=TStringList.Create;
 Plist:=TStringList.Create;
 with MyRegistry do
 begin
   RootKey :=HKEY_LOCAL_MACHINE;
   if OpenKey(
     'Software\Microsoft\Windows\CurrentVersion\Uninstall',
     False)=True then GetKeyNames(MyList);
     CloseKey;

             for i:=0 to MyList.Count-1 do
             begin
               RootKey:=HKEY_LOCAL_MACHINE;
               OpenKey(
                 'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
                 MyList[i],
                 False);
               Str:=ReadString('DisplayName');
               if Str<>'' then
                 Plist.Add(ReadString('DisplayName'));
                CloseKey;
             end;
 end;


           if Plist.Count>0 then
           begin
             Plist.SaveToFile(ExtractFilePath(ParamStr(0))+'\programlist.txt');
             FreeAndNil(Plist);
           end;

  except

   on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
 end;
end.

“Do. Or do not. There is no try.”
Cevapla
#4
32bit ve 64 bit uyumluluğu sağlamak için farklı yollar gerekiyor.

'Software\Microsoft\Windows\CurrentVersion\Uninstall' yerine 'Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' kullanmayı dene.

Ne hikmetse 32 bit veya 64 bit derlesem dahi aynı liste çıkıyor ve 64 bit uygulamalar listede yok. (En azından Winrar yok.) Önerdiğim yolda da aynı sonucu aldım. Sende farklı sonuç çıkabilir.

@Tuğrul HELVACI bu konuda yardımcı olabilir.

(Bu arada kodlar her iki mesajda da gözüküyor.)
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#5
(19-10-2016, Saat: 01:23)engerex Adlı Kullanıcıdan Alıntı: 32bit ve 64 bit uyumluluğu sağlamak için farklı yollar gerekiyor.

'Software\Microsoft\Windows\CurrentVersion\Uninstall' yerine 'Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' kullanmayı dene.

Ne hikmetse 32 bit veya 64 bit derlesem dahi aynı liste çıkıyor ve 64 bit uygulamalar listede yok.  (En azından Winrar yok.) Önerdiğim yolda da aynı sonucu aldım. Sende farklı sonuç çıkabilir.

@Tuğrul HELVACI bu konuda yardımcı olabilir.

(Bu arada kodlar her iki mesajda da gözüküyor.)

İlginçtir ki Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall bu yol registery de var ama kodda Software\Microsoft\Windows\CurrentVersion\Uninstall yerine koyup çalıştırdığımda sonuç getirmiyor.

“Do. Or do not. There is no try.”
Cevapla
#6
http://www.delphican.com/showthread.php?...t=registry
Bu konuda barutalinin verdiği ipucu ile bir ilgisi olabilir bir kontrol etmelisin.

Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
WWW
Cevapla
#7
(19-10-2016, Saat: 09:13)yhackup Adlı Kullanıcıdan Alıntı: http://www.delphican.com/showthread.php?...t=registry
Bu konuda barutalinin verdiği ipucu ile bir ilgisi olabilir bir kontrol etmelisin.

Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);

Malesef sadece 64 bit listeyi getirdi bu sefer.

“Do. Or do not. There is no try.”
Cevapla
#8
(19-10-2016, Saat: 13:11)masteryoda Adlı Kullanıcıdan Alıntı:
(19-10-2016, Saat: 09:13)yhackup Adlı Kullanıcıdan Alıntı: http://www.delphican.com/showthread.php?...t=registry
Bu konuda barutalinin verdiği ipucu ile bir ilgisi olabilir bir kontrol etmelisin.

Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);

Malesef sadece 64 bit listeyi getirdi bu sefer.


function TForm1.GetProgramList(const x64: Boolean): TStrings;
var
  MyList: TStringList;
  Plist: TStringList;
  MyRegistry: TRegistry;
  i: Integer;
  Str: string;
begin
 try
  if x64 then
   MyRegistry:=TRegistry.Create(KEY_READ or KEY_WOW64_64KEY)
   else
    MyRegistry:=TRegistry.Create(KEY_READ or KEY_WOW64_32KEY);

    MyList:=TStringList.Create;
    Plist:=TStringList.Create;

    with MyRegistry do
    begin
      RootKey :=HKEY_LOCAL_MACHINE;
      if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall', False) = True then
       GetKeyNames(MyList);
       CloseKey;

      for i:=0 to MyList.Count-1 do
      begin
        RootKey:=HKEY_LOCAL_MACHINE;
        OpenKey(
          'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
          MyList[i],
          False);
        Str:=ReadString('DisplayName');
        if Str<>'' then
          Plist.Add(ReadString('DisplayName'));
         CloseKey;
      end;
    end;
 finally
   Result := Plist;
 end;
end;
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#9
@barutali teşekkürler kod işimi gördü.

“Do. Or do not. There is no try.”
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 445 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  program exe icon sorunu cvheneburi 9 2.722 19-10-2023, Saat: 15:04
Son Yorum: harunyl
  Tanımlı yazıcı listesi çekme Bay_Y 2 346 25-09-2023, Saat: 17:03
Son Yorum: Bay_Y
  Windows Hizmet Listesi barissagir 0 201 13-09-2023, Saat: 10:55
Son Yorum: barissagir
  program boşta kalmışsa info@guzelceker.com 3 968 10-04-2023, Saat: 13:02
Son Yorum: ozcanm



Konuyu Okuyanlar: 1 Ziyaretçi