![]()
C# manifest dosyası ile UAC’ yi atlatmak
Uac user account control (kullanıcı denetimi teknolojisi) Windows vista ile gelen güvenlik özelliklerinden biridir. Sistemdeki özel yetki gerektiren dosyalar üzerinde işlem yapmak istediğinizde sizin onayınızı alması olayıdır. Buna örnek olarak cmd den diskpart yazdığımızda bu işlem için bizim onayımızı ister. Uac yi Kullanici hesap ayarları denetiminden manuel olarak kapatabilir ve değiştirebilirsiniz.
C# ile yaptığımız programlarda bazen UAC ye takılabiliriz özellikle klasör oluşturma veya regedit işlemlerinde örneğin regeditte local_machine den bir klasör silme işlemini aşağıdaki gibi direk çalıştırdığınızda güvenlik hatası verecektir.
Registry.LocalMachine.CreateSubKey(“SOFTWARE”).CreateSubKey(“Microsoft”).CreateSubKey(“Cryptography”).DeleteSubKey(“RNG”);
![]()
Yaptığımız programların UAC ye takılmaması için manifest dosyasını kullanırız. Manifest dosyası “once click ” ayarlarını gerçekleştirdiğimiz dosyamızdır. Projemize manifest dosyasını eklemek için solution explorer dan properties seçip “Security” sekmesinden
once clik kısmını enabled yapıyoruz bunu yaptığımız anda bizim için manifest dosyanısı oluşturuyor fakat burda dikkat etmemiz gereken oluşturduktan sonra tekrar disabled hale getirmemiz gerekiyor.
Solution dan manifest dosyanızı açıyoruz dosyamız xml formatında. Manifest doayamızın içeriği aşağıdaki gibidir şimdi bölümler halinde inceleyelim.
trustInfo: Elementi projemizin güvenlik ayarlarını yapmamızı sağlar.
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v2″>
<security>
<requestedPrivileges xmlns=”urn:schemas-microsoft-com:asm.v3″>
<!– UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level=”asInvoker” uiAccess=”false” />
<requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” />
<requestedExecutionLevel level=”highestAvailable” uiAccess=”false” />
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
–>
<requestedExecutionLevel level=” requireAdministrator ” uiAccess=”false” />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference=”Custom” />
<PermissionSet version=”1″ Unrestricted=”true” ID=”Custom” SameSite=”site” />
</applicationRequestMinimum>
</security>
</trustInfo>
Yukarıda gördüğümüz manifest dosyasındaki asInvoker Uygulama en düşük yetki seviyesinde çalıştır anlamına gelir. highestAvailable kullanıcıdan yüksek yetki ile çalışır ve bizden yetki ister. requireAdministrator Uygulamamız admin yetkisiyle çalışır. Biz işte burda default olarak gelen asinvoker kısmını requireAdministrator olarak değiştireceğiz böylece projemiz UAC ye takılmadan işlemlerini gerçekleştirebilecek.
entryPoint: Click once olayı(publish, update ..) gerçekleştiği anda istemcide çalışacak olan program.
<entryPoint>
<commandLine file=”Notepad.exe” parameters=”run” />
</entryPoint>