Wiem, że to stare, ale natknąłem się na to, szukając odpowiedzi. W moim przypadku używam funkcji publikowania i muszę jej nadal używać. Potrzebuję też dostępu do funkcji administratora. Z tego powodu żadna z powyższych odpowiedzi nie zadziałała.
Skończyło się na dodaniu metody na samym początku mojej aplikacji, która sprawdza, czy jest uruchomiona jako administrator, a jeśli nie, ponownie uruchom się jako administrator. Aby to zrobić, potrzebujesz następujących odniesień.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
Następnie musisz umieścić to w miejscu, do którego Twoja główna metoda ma wygodny dostęp. Używam WPF, więc dodałem go do MainWindow.xaml.cs, ale możesz dodać go w dowolnym miejscu na początku kodu. Pamiętaj tylko, aby dodać „statyczne” do tych metod, jeśli tego potrzebujesz.
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;
}
}
Na koniec dodaj odniesienie do metody na początku programu. W moim przypadku dodałem go do MainWindow, ale dodanie go do Main też działa.
public MainWindow()
{
InitializeComponent();
AdminRelauncher();
}
Mam nadzieję że to pomoże!
requireAdministrator
tutaj tego, co oczywiste, ale dodałeś manifest z prośbą o uprawnienia, a ClickOnce zaczął narzekać, że nie obsługujerequireAdministrator
. Problem powinien być bardzo jasny. ClickOnce widzi potrzebę podniesienia uprawnień w Twoim manifeście (który staje się częścią Twojej aplikacji). Nie jestem pewien, czego więcej tutaj potrzebujesz ...