Delphi XE / x64 kayıt defteri yetki sorunu [ÇÖZÜLDÜ]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Delphi XE / x64 kayıt defteri yetki sorunu [ÇÖZÜLDÜ]

Mesaj gönderen anoedi »

Merhaba arkadaşlar;

Windows 7 ve delphi xe kullanıyorum. Standart registry kütüphanesi ile kayıt defterine bazık kayıtlar eklemek istiyorum ancak izinler nedeni ile sorun çıkıyor.

Kod: Tümünü seç

 reg:=TRegistry.Create;
 reg.RootKey:=HKEY_LOCAL_MACHINE;
 reg.CreateKey('software\aadashdıadolasjdas');
 reg.CloseKey;
 reg.Free;
Şeklinde kodu hazırladım, butona tıklayınca hiçbir hata yada uyarı vermiyor ancak anahtarı da eklemiyor. Aynı kodları kullanarak hkey classes root'a istediğim gibi ekleme yapabiliyorum anca local machine kısmına ekleyemiyorum.

Bir başka durum ise;
yeni metin belgesi açıp, gerekli şekilde doldurup reg olarak kaydedip çift tıklama ile o kayıtları kayıt defterine girebiliyorum ancak aynı reg dosyasını kendi yazdığım programdan shellexecute gibi bir komutla çalıştırdığımda yine aynı sorun oluşuyor. (Ne hata ne uyarı ama eklemiyor.)

Yazdığım programı yönetici olarak çalıştırmayı da denedim, o da sonuç vermedi.
Ne yapmam gerekir acaba?
En son anoedi tarafından 14 May 2012 12:58 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
SHURZAN
Üye
Mesajlar: 73
Kayıt: 06 Eki 2007 05:34
Konum: İstanbul

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen SHURZAN »

Bunun için uygulamının Admin yetkisine sahip olması gerekir. mesela UAC' kapat işlem yapacaktır, Uygulamana admin yetkisi için forumda daha önce verilen UAC menifesto eklentisini dahil etmen gerekiyor.
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Kullandığım bilgisayarda UAC denetimi zaten kapalı, onu hiç kullanmıyorum.
Tavsiyeniz üzerine de ilgili manifesti ekledim forma ancak sonuç yine değişmedi. Hata vermiyor ancak ekleme de yapmıyor.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen sabanakman »

Yanlış hatırlamıyorsam 64 bit windows üzerinde 32 ve 64 bit uygulamalar için bağımsız Register kayıtları tutuluyordu. Kısacası yazdığınız değeri programdan okuyabilirsiniz ama RegEdit ten göremezsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Üstadım ben kayıt defterine bazı girdiler ekleyerek sağ tık menüsünü özelliştiren bir program geliştirmiştim.
Yani regeditten görmem çok önemli değil ama işlevini de yerine getirmiyor girdiler. Bu durumu aşmam için önerebileceğiniz birşey var mı?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen sabanakman »

64 bit sistem üzerinde pek çalışmadım ama aynı kodları hem 32 bit hem de 64 bit windows üzerinde denemenizi öneririm. Eğer her ikisinde de çalışmazsa win7 çalışma mantığında değişiklik yapmış demektir. Sadece 32 bit çalışır 64 bit çalışmazsa uygulamanızın 64 bit olması gerekmektedir. Bu arada denemeleri yaparken uygulamanızın tüm izinlere sahip olması gerekir. Bunu programı çalıştırırken sağ tıklayıp yönetici olarak çalıştır ı seçerek sağlayabilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Tavsiyeleriniz için teşekkür ederim. 32 bitlik bir bilgisayar bulur bulmaz deneyeceğim söylediklerinizi.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen mkysoft »

sanal makine kurun.
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Hocam tavsiyeleriniz için tekrar tekrar teşekkür ederim.
32 bitlik bir bilgisayarda denedim projeyi, gayet normal bir biçimde çalıştı. Sorun 64 bit işletim sisteminden kaynaklanıyormuş.
Rad studio XE2 de x64 desteği vardı sanırım, şimdi ona geçmeyi düşünüyorum.
Tekrar teşekkürler, saygılarımla.
Kullanıcı avatarı
SHURZAN
Üye
Mesajlar: 73
Kayıt: 06 Eki 2007 05:34
Konum: İstanbul

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen SHURZAN »

Bu sorun işletim sisteminin 32 bit uygulamalarına destek verdiği için oluşmakata.
32 uygulamanın registry'de ulaşabildiği alan "HKLM/Software/Wow6432Node" alanıdır. bu alanı 32 uygulamalar, "HKLM/Software" alanınıda 64 bit uygulamalar kullanır. Senin yaptığın iş işletim sistemine bir özellik kazandırmak olduğuna göre yapacağın kayıt Wow6432Node altında omamalıdır. Bunun için reg nesnenin erişim değerini belirlemelisin aşağıdaki gibi değişiklik yapmalısın.
Eğer yeniden Wow6432Node altında yeniden yazılacaksa "reg.Access := KEY_WOW64_32KEY or KEY_ALL_ACCESS;" olarak değiştirip yaz.

Kod: Tümünü seç

 reg:=TRegistry.Create;
 reg.RootKey:=HKEY_LOCAL_MACHINE;
 reg.Access := KEY_WOW64_64KEY or KEY_ALL_ACCESS;
 reg.CreateKey('software\aadashdıadolasjdas');
 reg.CloseKey;
 reg.Free;

Kolay gelsin
Yaşar İsmail Aktaş
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Hocam söyledikleriniz üzerine gidip kontrol ettim, daha önceki denemelerimde (kayıt eklemiyor dediklerim) WOW64 altına birkaç veri atmış. Kodu bu şekilde düzenleyince (reg.Access := KEY_WOW64_32KEY ya da KEY_ALL_ACCESS) WOW64 altına verileri gönderiyor ancak HKLM\software içine yine göndermiyor. Sizin de söylediğiniz gibi WOW64 içindeki satırlar benim işime yaramıyor malesef.

Sanırım 32bitlik uygulama ile HKLM\software içine veri göndermenin bir yolu yok. Doğru anlamış mıyım acaba?
Kullanıcı avatarı
SHURZAN
Üye
Mesajlar: 73
Kayıt: 06 Eki 2007 05:34
Konum: İstanbul

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen SHURZAN »

Yazmanın yolu var dostum,
64 bit işletim sistemlerinde
Eğer uygulaman 32 bit ise işletim sistemi senin "HKLM/Software/Wow6432Node" altına yönledirir.
Eğer uygulaman 64 bit ise iştem sistemi seni "HKLM/Software" altına yönlendirir.
O yüzden önce uygulaman hangi işletim sisteminde çalıştığını anlaması gerekir.

Diyelim işletim sistemin 64 bit ve uygulaman 64 değil 32 bit bu durumda yukarıdaki durum oluşur.
yönlendirmeyi düzenlemek için aşağıdaki gibi erişimleri düzenliyoruz.
"KEY_ALL_ACCESS" biliyoruz ki okuma ve yazma yetkisinin verir.

reg.Access := KEY_WOW64_32KEY or KEY_ALL_ACCESS; kod parçasıyla "HKLM/Software/Wow6432Node" altına erişim sağlar,
reg.Access := KEY_WOW64_64KEY or KEY_ALL_ACCESS; kod parçasıyla "HKLM/Software" altına erişim sağlar.

Kolay Gelsin.
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Hocam her ikisini de denedim, ikisi de HKLM\software içinde girdi eklemiyor. all access yetkisini verdiğim zaman doğrudan "HKLM/Software/Wow6432Node" altına gönderiyor girdileri.

Yani "KEY_WOW64_64KEY " yapısı software altına erişim sağlamıyor, yine Wow6432node a sağlıyor.
Kullanıcı avatarı
SHURZAN
Üye
Mesajlar: 73
Kayıt: 06 Eki 2007 05:34
Konum: İstanbul

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen SHURZAN »

Ben şu an 32 bit projemi Rad Studio XE 2011 altında derliyorum ve yukarıdaki anlattıklarımı halen projemde olan şekliyle verdim kaldı ki öyle bir kaç satırlık regsitry çalışması yapmıyorum binlerce satırda registry çalışması yapmaktayım ve bir kaç regsitry kayıt girdisi değil yüzlerce kayıt okuma ve yazma yapıyorum.
Bknz: Shurzanop 2.7
http://www.shurzan.com/Dosyalar/Shurzanop.zip

Çalıştığın fonksiyonun kodunu verirmisin , mutlaka bir hatan vardır

Dip not: UAC eklentisi de projene dahil olmalı.
En son SHURZAN tarafından 14 May 2012 12:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Delphi XE / kayıt defteri yetki sorunu

Mesaj gönderen anoedi »

Hocam söylediklerinizi aynen yaptım. Dpr de res de ekli, yönetici izinleri de var, uygulamayı yönetici olarak da çalıştırdım, UAC denetimi de kapalı, kod bloğunu söylediğiniz biçimde de düzenledim ama hala WOWun altına atıyor ekle dediğimde.

Buyrun kendiniz bakın isterseniz.

Kod: Tümünü seç

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R 'WinUAC.res' 'WinUAC.rc'}
procedure TForm1.Button1Click(Sender: TObject);
var reg : tregistry;
begin
 reg:=TRegistry.Create;
 reg.RootKey:=HKEY_LOCAL_MACHINE;
 reg.Access := KEY_WOW64_64KEY or KEY_ALL_ACCESS;
 reg.CreateKey('software\aaaaa');
 reg.CloseKey;
 reg.Free;
end;
Anlam veremedim bir türlü...
Cevapla