Еще один способ сделать это только в коде - это определить, работает ли процесс как администратор, как в ответе @ NG. . А затем снова откройте приложение и закройте текущее.
Я использую этот код, когда приложению нужны только права администратора при запуске в определенных условиях, например при установке себя в качестве службы. Так что он не должен запускаться от имени администратора все время, как другие ответы заставляют его тоже.
Примечание в приведенном ниже коде NeedsToRunAsAdmin
- это метод, который обнаруживает, требуются ли в текущих условиях права администратора. Если это возвращает false
, код не будет повышаться. Это главное преимущество этого подхода перед другими.
Хотя этот код имеет преимущества, указанные выше, ему необходимо перезапустить себя как новый процесс, который не всегда соответствует желаемому.
private static void Main(string[] args)
{
if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
foreach (string arg in args)
{
proc.Arguments += String.Format("\"{0}\" ", arg);
}
proc.Verb = "runas";
try
{
Process.Start(proc);
}
catch
{
Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
}
}
else
{
//Normal program logic...
}
}
private static bool IsRunAsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}