Yönetici Olarak Çalıştırmak (UAC)

Sizlerde Delphi ile yazdığımız programlarda windows vista ve sonrasında yetki sıkıntıları yaşamışsınızdır. Örneğin registry erişimi, windows klasörlerine yazma okuma, bilgisayar saatini değiştirme, parasal ve ondalık ayracı değiştirme, tarih saat formatı değiştirme gibi. Özellikle Windows 8 ve 8.1 de daha fazla kısıtlama getirilmiş, doğrudan sistem kurulu olan sürücüye yazmak için yönetici hakkı istemektedir. “C:\ altına”, “C:\Program Files”, “C:\Program Files(x86)” gibi…

Yetki sıkıntısını aşmanın yolu manifest dosyasından geçiyor. Delphi 2010 ve önce ki sürümlerinde. IDE varsayılan bir manifest dosyası oluşturuyor ve derleme esnasında bu dosya kullanılıyor. Bu dosya üzerinde işletim sisteminden yönetici yetkisi istenmiyor, uygulama varsayılan seviyede çalıştırılıyor.

Şimdi kendi manifest dosyamızı oluşturup proje içersine ekleyerek Delphinin oluşturduğu manifest dosyasını ezelim.

Aşağıda ki dosyaları bir klasör içersine kaydediniz.

WinUAC.manifest

 “equireAdministrator” ile yönetici olarak çalışacağını belirttik. Burda ki önemli noktalardan birisi de <dependency> tanımlama kısmıdır. “Microsoft.Windows.Common-Controls” tanımlaması ile kontrollerin modern windows teması şeklinde görüntülenmesini sağlar. Bu tanımlama olmaz ise uygulamadaki kontroller win 98 stili şeklinde görünecektir. (Delphi 6 da olduğu gibi).

WinUAC.rc

rc dosyamızda ID si 1 olan ve tipi 24 olan bir resource oluşturuyoruz. ID si 1 olan resource delphi içersinde gömülü olan masnifest dosyasıdır. Bizde onu ezecek olan dosyayı oluşturmuş olduk.

Compile.bat

rc dosyasını brcc32.exe ile resource haline getiriyoruz.

Şimdi bu res dosyasını delphi projemize eklemek kaldı.

Öncelikle “Project Options” dan Enable Runtime Themas ın işaretini kaldırıyoruz. Proje dosyamıza alttaki kodu ekleyerek res dosyasını programa dahil etmiş oluyoruz.

Şimdi projeyi derlediğimiz zaman UAC açık ise programı açmaya çalıştığınızda yönetici hakları isteyen windows penceresi ile karşılaşacaksınız. UAC kapalı ise her hangi bir pencere gelmeden program direk yönetici olarak çalışacaktır.

Not: Eğer Delphi Xe 2 ve sonrası sürümlerini kullanıyorsanız. “Project Options” altında “Use Custom Manifest” seçeneğinden yukarıda oluşturduğumuz WinUAC.manifest dosyasını göstermeniz yeterli olacaktır. Res haline çevirip projeye koymanıza gerek kalmayacak bu işlemi bizim yerimize Delphinin kendisi halledecektir.