Bunun eski olduğunu biliyorum ama cevapları ararken tökezledim. Benim durumumda, yayınlama işlevini kullanıyorum ve kullanmaya devam etmem gerekiyor. Ayrıca yönetici yeteneklerine erişime ihtiyacım var. Bu nedenle, yukarıdaki cevapların hiçbiri benim için işe yaramadı.
Uygulamamın en başına, yönetici olarak çalıştırılıp çalıştırılmadığını kontrol eden ve çalışmıyorsa, kendisini yönetici olarak yeniden başlatan bir yöntem ekledim. Bunu yapmak için, aşağıdaki referansların eklenmesi gerekir.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
O zaman bunu ana yönteminizin kullanışlı erişime sahip olduğu bir yere koymanız gerekecek. WPF kullanıyorum, bu yüzden onu MainWindow.xaml.cs'ye ekledim, ancak kodunuzun başlarında istediğiniz yere ekleyebilirsiniz. İhtiyaç duymanız durumunda bu yöntemlere "statik" eklemeyi unutmayın.
private void AdminRelauncher()
{
if (!IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
proc.Verb = "runas";
try
{
Process.Start(proc);
Application.Current.Shutdown();
}
catch(Exception ex)
{
Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
}
}
}
private bool IsRunAsAdmin()
{
try
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (Exception)
{
return false;
}
}
Son olarak, programınızın başlangıcında yönteme bir referans ekleyin. Benim durumumda MainWindow'a ekledim ama Main'e de ekledim.
public MainWindow()
{
InitializeComponent();
AdminRelauncher();
}
Bu yardımcı olur umarım!
requireAdministrator
ve ClickOnce desteklemediğinden şikayet etmeye başladırequireAdministrator
. Sorun son derece açık olmalı. ClickOnce, bildiriminizde (uygulamanızın bir parçası haline gelen) yükseltme ihtiyacını görüyor. Burada daha fazla neye ihtiyacın olduğundan emin değilim ...