Windows İşletim Sistemi güvenlik açısından programlar çalıştırılırken Administrator yetkisi istemektedir. Eğer projenizde yönetici yetkisi gerektiren bir ayar söz konusuysa projenizi Administrator yetkisiyle şöyle çalıştırabilirsiniz.
Yöntem 1
Projeye manifest dosyası ekleyiniz. Eklediğiniz bu dosyanın içine aşağıdaki kodu yazınız.
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Kullanıcı, uygulamayı başlatırken her zaman bir UAC istemi alır. Eğer projede “ClickOnce does not support the request execution level 'requireAdministrator.'” hatası alırsanız, proje ismi üzerindeyken farenin sağ tuşuna basıp özelliklere gelin. Burada Security sekmesini tıklayın. Burada "Enable ClickOnce security settings" onay kutusundaki işareti kaldırın.
Yöntem 2
Bu yöntemde projenin admin yetkisiyle açılıp açılmadığı kontrol edilmekte ve admin yetkisiyle proje yeninden başlatılmaktadır. Aşağıdaki metodu program.cs dosyasına yazınız.
public static bool IsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
Aşağıdaki kodu formun Shown olayına yazınız.
this.Cursor = Cursors.WaitCursor;
AdminRelauncher();
this.Cursor = Cursors.Default;
Burada AdminRelauncher() metodunu tanımlayalım.
private void AdminRelauncher()
{
if (!Program.IsAdministrator())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
proc.Verb = "runas";
try
{
Process.Start(proc);
Application.Exit();
}
catch (Exception ex)
{
Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
}
}
}
Bu metodu aşağıdaki gibi de tanımlayabiliriz.
private void AdminRelauncher()
{
if (!Program.IsAdministrator())
{
// Restart and run as admin
var exeName = Process.GetCurrentProcess().MainModule.FileName;
ProcessStartInfo startInfo = new ProcessStartInfo(exeName);
startInfo.Verb = "runas";
startInfo.Arguments = "restart";
Process.Start(startInfo);
Application.Exit();
}
}
|