Eu sei que isso é antigo, mas me deparei com ele em busca de respostas. No meu caso, estou usando a função de publicação e preciso continuar usando-a. Eu também preciso de acesso aos recursos de administrador. Portanto, por esse motivo, nenhuma das respostas acima funcionou para mim.
Acabei adicionando um método bem no início do meu aplicativo que verifica se ele está sendo executado como um administrador e se não estiver, reinicie-se como um administrador. Para fazer isso, você precisa das seguintes referências adicionadas.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
Em seguida, você precisará colocá-lo em algum lugar ao qual seu método principal tenha acesso acessível. Estou usando o WPF, então adicionei-o a MainWindow.xaml.cs, mas você pode adicioná-lo em qualquer lugar no início de seu código. Lembre-se de adicionar "estático" a esses métodos, caso precise.
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;
}
}
Por último, no início do seu programa, adicione uma referência ao método. No meu caso, eu o adicionei à MainWindow, mas adicioná-lo ao Main também funciona.
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
Espero que isto ajude!
requireAdministrator
permissões e o ClickOnce começou a reclamar que não é compatívelrequireAdministrator
. O problema deve ser extremamente claro. ClickOnce está vendo a necessidade de elevação em seu manifesto (que se torna parte de seu aplicativo). Não tenho certeza do que mais você precisa aqui ...