Konuyu Paylaş : facebook gplus twitter

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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlKodları 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol32bit 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
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Bu konuda barutalinin verdiği ipucu ile bir ilgisi olabilir bir kontrol etmelisin.

Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#7
(19-10-2016, Saat: 09:13)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlLinkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(19-10-2016, Saat: 09:13)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlLinkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Uzak masaüstünde çalışan program, bağlantı kesildiğinde hata veriyor canbir 0 109 16-03-2018, Saat: 18:50
Son Yorum: canbir
  Program Files Yetki Sorunu narkotik 9 307 18-01-2018, Saat: 17:45
Son Yorum: SimaWB
Question program içerisine veritabansız kayıt BY-HAYALET 6 245 09-12-2017, Saat: 12:23
Son Yorum: Abdullah ILGAZ
  Çalışma anında program kodu yazıp çalıştırmak boreas 9 522 30-10-2017, Saat: 11:17
Son Yorum: engerex
  Görev yöneticisinden program sonlandırma tgural 14 1.145 13-10-2017, Saat: 22:26
Son Yorum: QuAdR



Konuyu Okuyanlar: 1 Ziyaretçi