Vista UAC ve Winforms uygulamaları ilişkisinde yazılımcının yeri

0 dakikada yazıldı

9485 defa okundu

Düzenle

Windows Vista ile beraber karşımıza çıkan UAC (User Account Control)
aslında Winforms programcılığında çok şey değiştirdi. Özetle artık
istediğimiz gibi herhangi bir klasöre dosya yazamıyoruz veya Registry
içerisinde istediğimiz değişiklikleri yapamıyoruz. Ya uygulamamıza
verilen haklar çerçevesinde hareket etmek zorundayız ya da kullanıcıdan
ek haklar istemeliyiz.

Bu yazıda hızlı bir şekilde Vista ile gelen UAC'nin yazılım geliştirme
esnasındaki kullanımına değinerek farklı çözümler geliştireceğiz.

Dosyaları diskte nereye yazmalı?

Programınızın ürettiği bir dosya var ve onu istediğiniz yere
yazamadığınızın farkında vardınız. Eğer dosyanın yazılacağı yeri
kullanıcıdan bir SaveFileDialog ile alıyorsanız zaten bu prosesi Vista
kendisi halledecek ve kullanıcıyı Admin hakkı gerektiğine dair
uyaracaktır fakat eğer dosyayı siz programatik olarak doğrudan yazmak
istiyorsanız maalesef hakkınız olan bir yer bulmanız gerek.

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Yukarıdaki kod ile kolaylıkla yazma hakkınız olan bir alana
ulaşabilirsiniz. Tabi bunun haricinden kullanıcının Desktop veya
MyDocuments gibi alanlara da doğrudan Admin hakkı gerekmeksizin ulaşması
hakkı vardır. Tüm bu klasörlere de rahatlıkla ulaşabilirsiniz fakat
genelde bu noktalara yazılımlarla ilgili özel dosyaların saklanması
doğru olmaz.

Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

Admin haklarını nasıl alırız?

Eğer hazırladığınız uygulamanın kesinlikle Admin haklarına ihtiyacı
varsa uygulamayı UAC'yi çağıracak şekilde düzenlemelisiniz. Böylece
program ilk açıldığında kullanıcıdan Admin hakları isteyecektir, aksi
halde program açılmayacaktır. Tüm bu ayarları projelerinizdeki
app.manifest dosyası içerisinde yapabilirsiniz. Bu dosyaya kolay
şekilde ulaşmak için Visual Studio içerisindeki Solution Explorer
içerisinde projeye sağ tıklayarak kelen menüden "Properties"i seçip
"Application" tabında "View UAC Settings" demeniz yeterli olacaktır.

<?xml
version="1.0" encoding="utf-8"?>

<asmv1:assembly
manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <assemblyIdentity version="1.0.0.0"
name="MyApplication.app"/>

  <trustInfo
xmlns="urn:schemas-microsoft-com:asm.v2">

    <security>

      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

      </requestedPrivileges>

    </security>

  </trustInfo>

</asmv1:assembly>

Bu dosya içerisinde normalde asInvoker yazan yere yukarıdaki gibi
requireAdministrator yazarsanız bir sonraki  Build ile oluşturulan
uygulama artık UAC'den admin hakları isteyerek çalışacaktır. Bu da
uygulamanıza her yere ulaşım hakkı verildiği anlamına gelir.

Hepinize kolay gelsin.