So che questo è vecchio ma mi sono imbattuto in esso alla ricerca di risposte. Nel mio caso, sto utilizzando la funzione di pubblicazione e devo continuare a utilizzarla. Ho anche bisogno di accedere alle funzionalità di amministrazione. Quindi, per questo motivo, nessuna delle risposte precedenti ha funzionato per me.
Ho finito per aggiungere un metodo all'inizio della mia applicazione che controlla se viene eseguito come amministratore e, in caso contrario, riavvia se stesso come amministratore. Per fare ciò, è necessario aggiungere i seguenti riferimenti.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
Quindi dovrai metterlo da qualche parte a cui il tuo metodo principale abbia un comodo accesso. Sto usando WPF, quindi l'ho aggiunto a MainWindow.xaml.cs ma puoi aggiungerlo ovunque all'inizio del codice. Ricorda solo di aggiungere "statico" a questi metodi se ne hai bisogno.
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;
}
}
Infine, all'inizio del programma, aggiungi un riferimento al metodo. Nel mio caso, l'ho aggiunto a MainWindow ma aggiungendolo anche a Main funziona.
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
Spero che questo ti aiuti!
requireAdministrator
autorizzazioni e ClickOnce ha iniziato a lamentarsi del fatto che non supportarequireAdministrator
. Il problema dovrebbe essere estremamente chiaro. ClickOnce sta vedendo la necessità di elevazione nel tuo manifest (che diventa parte della tua applicazione). Non sono sicuro di cos'altro hai bisogno qui ...