我知道这很旧,但是我偶然发现了它以寻找答案。就我而言,我正在使用发布功能,我需要继续使用它。我还需要访问管理功能。因此,由于上述原因,以上答案均无济于事。
最后,我在应用程序的开头添加了一种方法,以检查它是否以管理员身份运行,如果不是,则以管理员身份重新启动。为此,您需要添加以下参考。
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
然后,您需要将其放在您的主要方法可以方便访问的位置。我正在使用WPF,所以我将其添加到MainWindow.xaml.cs,但是您可以在代码的任何早期添加它。请记住,如果需要,可以在这些方法中添加“静态”。
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;
}
}
最后,在程序开始时,添加对该方法的引用。就我而言,我将其添加到MainWindow,但也将其添加到Main也可以。
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
希望这可以帮助!
requireAdministrator
权限,而ClickOnce开始抱怨它不支持requireAdministrator
。这个问题应该非常清楚。ClickOnce看到清单中需要提升高度(清单已成为应用程序的一部分)。我不确定您在这里还需要什么...