Registry Delete

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Kısayol Dosyası Silinemedi
"Erişim engellendi"
Uyarısı veriyor hocam.Administrator olarak da girdim olamadı.Aynı hatayı verdi.Sorn Administrator da gibi sanki ama

Kod: Tümünü seç

procedure TForm2.Button19Click(Sender: TObject);
begin
    if CreateDesktopShellLink(CSIDL_ALTSTARTUP, 'C:\UsbAnahtar\Data\UsbAnahtar.exe') then
   begin
    Path := 'C:\UsbAnahtar\Data\UsbAnahtar.lnk'; //Kısayol yolunu belirtmeniz daha yerinde olur.
    ShowMessage('Kısayol dosyası oluşturuldu ...');
   end;
end;

Kod: Tümünü seç

procedure TForm2.Button20Click(Sender: TObject);
begin
 DeleteFile(Path);
 showmessage('lnk dosyası kaldırıldı');
end;
bu şekli ile denedim oda olmadı.Birde hocam lnk yolu açılırken çok geç devreye giriyor yani masaüstü falan yükleniyor ondan sonra lnk ya geçiyor bu da bir sorun benim için bunla ilgilide fikrinizi yazarsanız çok memnun olurum
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Registry Delete

Mesaj gönderen thelvaci »

Genel olarak ne yapmak istediğinizi daha önce söylediğiniz ve bizlerce de malum olduğu için; şu linki de incelemenizi önereceğim. :wink:
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Hocam bu makaleyi anlamak ayrı bir dert :) ben 3 kere okudum neyi nereye uyguluyoruz.sayın helvacı
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Registry Delete

Mesaj gönderen ertank »

haydarxxx yazdı: 31 May 2018 08:59 Kısayol Dosyası Silinemedi
"Erişim engellendi"
Uyarısı veriyor hocam.Administrator olarak da girdim olamadı.Aynı hatayı verdi.Sorn Administrator da gibi sanki ama

Kod: Tümünü seç

procedure TForm2.Button19Click(Sender: TObject);
begin
    if CreateDesktopShellLink(CSIDL_ALTSTARTUP, 'C:\UsbAnahtar\Data\UsbAnahtar.exe') then
   begin
    Path := 'C:\UsbAnahtar\Data\UsbAnahtar.lnk'; //Kısayol yolunu belirtmeniz daha yerinde olur.
    ShowMessage('Kısayol dosyası oluşturuldu ...');
   end;
end;

Kod: Tümünü seç

procedure TForm2.Button20Click(Sender: TObject);
begin
 DeleteFile(Path);
 showmessage('lnk dosyası kaldırıldı');
end;
bu şekli ile denedim oda olmadı.Birde hocam lnk yolu açılırken çok geç devreye giriyor yani masaüstü falan yükleniyor ondan sonra lnk ya geçiyor bu da bir sorun benim için bunla ilgilide fikrinizi yazarsanız çok memnun olurum
Daha önceki örnekleri iyi incelememişsiniz. CreateDesktopShellLink() fonksiyonu Windows başlangıç dizinini tespit edip otomatik başlangıç için gerekli kısayol dosyasını oluşturuyor. Bu dizin işletim sistemine göre değişiklik gösterecektir. Bu sebeple sabit olarak verilmiyor.

Siz daha sonra otomatik başlangıç kısayol dosyasını silmek istediğinizde aşağıdaki gibi bir kod kullanmanız gerekir iken bunu yapmıyorsunuz:

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  FileName: string;
begin
  FileName := GetSpecialFolderPath(CSIDL_ALTSTARTUP);
  FileName := TPath.Combine(FileName, 'ExeFile.lnk');

  if TFile.Exists(FileName) then
  begin
    try
      TFile.Delete(FileName);
    except
      on E: Exception do
      begin
        ShowMessage('Kısayol dosyası silinemedi.' + sLineBreak + AnsiQuotedStr(E.Message, '"'));
      end;
    end;
  end;
end;
Bu koda dikkat ederseniz öncelikle silinmesi gereken dosyanın dizinini tespit ediyor. Ardından dosya adını dizin ile birleştiriyor. Bundan sonra da sadece dosya mevcut ise silme işlemini yapmaya çalışıyor. Olası bir hata durumunu da silme işleminde kontrol ediyor.

Özetle silme kodunuzu yukarıdaki örneğe benzer yapmalısınız. Sizin kodunuz mevcut olmayan bir dosyayı silmeye çalıştığı için hata veriyor.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Siz daha sonra otomatik başlangıç kısayol dosyasını silmek istediğinizde aşağıdaki gibi bir kod kullanmanız gerekir iken bunu yapmıyorsunuz:

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  FileName: string;
begin
  FileName := GetSpecialFolderPath(CSIDL_ALTSTARTUP);
  FileName := TPath.Combine(FileName, 'ExeFile.lnk');

  if TFile.Exists(FileName) then
  begin
    try
      TFile.Delete(FileName);
    except
      on E: Exception do
      begin
        ShowMessage('Kısayol dosyası silinemedi.' + sLineBreak + AnsiQuotedStr(E.Message, '"'));
      end;
    end;
  end;
end;
hocam böyle yapıyorum zaten diğeri bir alternatif olarak söyledim.
Bu koda dikkat ederseniz öncelikle silinmesi gereken dosyanın dizinini tespit ediyor. Ardından dosya adını dizin ile birleştiriyor. Bundan sonra da sadece dosya mevcut ise silme işlemini yapmaya çalışıyor. Olası bir hata durumunu da silme işleminde kontrol ediyor.
işte bu işlemi gerçekleştiremiyor

Kısayol Dosyası Silinemedi
"Erişim engellendi" uyarısı veriyor.Ben sizin yazdığınız koda göre söyledim diğer yazdığımı dikkate almayın.

dosya lnk buttonum

Kod: Tümünü seç

procedure TForm2.Button11Click(Sender: TObject);
begin
   if CreateDesktopShellLink(CSIDL_ALTSTARTUP, 'C:\UsbAnahtar\Data\UsbAnahtar.exe') then

     end;

procedure TForm2.Button12Click(Sender: TObject);
var
  FileName: string;
begin
  FileName := GetSpecialFolderPath(CSIDL_ALTSTARTUP);
  FileName := TPath.Combine(FileName,'UsbAnahtar.lnk');
            ShowMessage('UsbAnahtar Sistem dosyası silindi.Tahtanız Güvenlikde değil...') ;
  if TFile.Exists(FileName) then
  begin
    try
      TFile.Delete(FileName);  //sil
    except
      on E: Exception do
      begin
        ShowMessage('UsbAnahtar Sistem Dosyası Silinemedi...' + sLineBreak + AnsiQuotedStr(E.Message, '"'));
      end;
    end;
  end;

end;
lnk kaldırma buttonum

Kod: Tümünü seç

procedure TForm2.Button12Click(Sender: TObject);
var
  FileName: string;
begin
  FileName := GetSpecialFolderPath(CSIDL_ALTSTARTUP);
  FileName := TPath.Combine(FileName,'UsbAnahtar.lnk');
            ShowMessage('UsbAnahtar Sistem dosyası silindi.Tahtanız Güvenlikde değil...') ;
  if TFile.Exists(FileName) then
  begin
    try
      TFile.Delete(FileName);  //sil
    except
      on E: Exception do
      begin
        ShowMessage('UsbAnahtar Sistem Dosyası Silinemedi...' + sLineBreak + AnsiQuotedStr(E.Message, '"'));
      end;
    end;
  end;

end;
lnk ekleme tamam ama silmede "Erişim engellendi" uyarısı veriyor
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Registry Delete

Mesaj gönderen ertank »

Link silme kodunuzun olduğu Buton12Click() prosedürü içinde aşağıdakileri yapıp sonucu bildirebilir misiniz?

- Aşağıdaki satır üzerine gelip F5 tuşuna basın. Bu işlem "break point" ekleyecektir. Satırın sol başında kırmızı daire görmeniz gerekli.

Kod: Tümünü seç

if TFile.Exists(FileName) then
- Uygulamanızı Delphi içinden DEBUG modunda (sadece F9 tuşuna basarak) çalıştırın.
- Çalışan uygulamanızda ilgili butonu tıklayarak otomatik başlatma linki oluşturun.
- Çalışan uygulamanızda link dosyasını silmek için "Buton12" butonunu tıklayın. Bunu yapınca Delphi uygulama çalışmasını durdurur.

Bu noktadan sonra aşağıdaki yapın:
1) Eğer kendisi otomatik aktif olmadı ise Delphi'ye geçiş yapın.
2) Delphi içinde imleç "break point" koyduğumuz satırda olacaktır. Ekranın sol alt kısmında FileName değişkeninin değerini öğrenip burada paylaşın.
3) Öğrendiğiniz değerde belirtilen dosyanın disk üzerinde mevcut olup olmadığını kontrol Windows Explorer kullanarak kontrol edin. Dosyanın var/yok olduğu sonucunu burada paylaşın.
4) F8 tuşu ile adım adım ilerleyip "Erişim engellendi" hatasını hangi satırda aldığınızı kontrol edin. Hata aldığınız satırı burada paylaşın.

Normal koşullarda bu kod hata oluştuğu zaman Exception bloğu içindeki mesajı ekranda gösteriyor olması gerekli. Sizin aldığınız hata farklı bir yerden kaynaklanıyor olabilir. Bir ihtimal daha "break point" noktasına ulaşmadan hata alıyor olabilirsiniz. Eğer böyle bir durum var ise break pointi daha önceki satırlara kaydırarak (F5 tuşu break point ekle/kaldır olarak iki şekilde çalışır) hata aldığınız satırı burada paylaşın.

Ayrıca biraz daha detaylı test etmenizi tavsiye edebilirim.
* Link oluştur-Link sil tıklamaları arasında normalde birkaç saniye bekliyor iseniz bu süreyi bir dakika gibi daha uzun tutarak deneyebilirsiniz.
* Link oluşturup bilgisayarı kapatıp açıp link silmeyi deneyebilirsiniz.
* Anti-Virüs uygulamanız var ise kapatıp silme testi yapabilirsiniz.

Windows 10 64Bit işletim sistemi üzerinde yaptığım denemelerde bahsettiğiniz hatayı almıyorum.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

- Uygulamanızı Delphi içinden DEBUG modunda (sadece F9 tuşuna basarak) çalıştırın.
- Çalışan uygulamanızda ilgili butonu tıklayarak otomatik başlatma linki oluşturun.
- Çalışan uygulamanızda link dosyasını silmek için "Buton12" butonunu tıklayın. Bunu yapınca Delphi uygulama çalışmasını durdurur.
Adım Adım yaptım Hocam
2) Delphi içinde imleç "break point" koyduğumuz satırda olacaktır. Ekranın sol alt kısmında FileName değişkeninin değerini öğrenip burada paylaşın
FileName değişkeninin değeri
C:\Users\Haydar\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup şeklinde ve bunun altında UsbAnahtar oluştur butonu ile oluşuyor ve sil butonu ile de siliniyor denedim sorun yok.Ki bu dosya tahtada oluşuyor mu bir bakacağim.Laptobumda zaten bu kodlar çalışıyor
4) F8 tuşu ile adım adım ilerleyip "Erişim engellendi" hatasını hangi satırda aldığınızı kontrol edin. Hata aldığınız satırı burada paylaşın
bunu yinede denedim yinede diyorum benim kodlarımın içinde "Erişim engellendi" gibi bir mesaj diyalog yok
Normal koşullarda bu kod hata oluştuğu zaman Exception bloğu içindeki mesajı ekranda gösteriyor olması gerekli. Sizin aldığınız hata farklı bir yerden kaynaklanıyor olabilir. Bir ihtimal daha "break point" noktasına ulaşmadan hata alıyor olabilirsiniz. Eğer böyle bir durum var ise break pointi daha önceki satırlara kaydırarak (F5 tuşu break point ekle/kaldır olarak iki şekilde çalışır) hata aldığınız satırı burada paylaşın.

Ayrıca biraz daha detaylı test etmenizi tavsiye edebilirim.
* Link oluştur-Link sil tıklamaları arasında normalde birkaç saniye bekliyor iseniz bu süreyi bir dakika gibi daha uzun tutarak deneyebilirsiniz.
* Link oluşturup bilgisayarı kapatıp açıp link silmeyi deneyebilirsiniz.
* Anti-Virüs uygulamanız var ise kapatıp silme testi yapabilirsini

Windows 10 64Bit işletim sistemi üzerinde yaptığım denemelerde bahsettiğiniz hatayı almıyorum.
labtopbumda bende hata almıyorum (Windows 10 64Bit işletim sistemim var benimde).Yani kodlar tıkır tıkır çalışıyor.Sıkıntı yok.Ama Akıllı tahtadaya yüklediğimde ki tahtada win 8.1 yüklü hatayı veren o.bu kodu çalıştırırken "Erişim engellendi" hatasını tahta veriyor.Exe leri çalıştırıken Administrator bile istemedi.İstesede şifrele var.Projenin her noktası tahtada muntazaman çalışıyor.lnk yı ekliyor açılışta lnk yı bulup devreye sokuyor.Ama lnk dosyasını

Kod: Tümünü seç

TFile.Delete(FileName);
yaptığımızda erişim engellendi diyor
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Ertank hocam işlerimden dolayı pek ilgilenemedim akıllı tahtayı kontrol ettim lnk dosyasını buldum ama güvenlik nedeni ile silme işlemini yapmıyor yazma silme güvenliği kapalı bu durumu nasıl aşarız bütün problem bundan kaynaklı kodda bir sıkıntı yok.Gerekli izinleri nasıl verebiliriz kodla yada manuel.windowsda Manuel olarak baktım ama hiç bir izni düzenleyemedim.windowsdan doğrudan sil diyorum windowsda silemiyor izinlerden dolayı.

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\UsbAnahtar.lnk altındaki dosyanın silinmesi izinli değil

https://drive.google.com/open?id=175vhO ... Go9CeijlZR
https://drive.google.com/open?id=11ZwF- ... FNvdG2-kaV
Cevapla