Ich weiß, dass dies alt ist, aber ich bin darüber gestolpert und habe nach Antworten gesucht. In meinem Fall verwende ich die Veröffentlichungsfunktion und muss sie weiterhin verwenden. Ich benötige auch Zugriff auf Verwaltungsfunktionen. Aus diesem Grund hat keine der oben genannten Antworten für mich funktioniert.
Am Ende meiner Anwendung habe ich eine Methode hinzugefügt, die überprüft, ob sie als Administrator ausgeführt wird, und wenn dies nicht der Fall ist, starten Sie sich selbst als Administrator neu. Dazu müssen die folgenden Referenzen hinzugefügt werden.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
Dann müssen Sie dies an einer Stelle ablegen, auf die Ihre Hauptmethode praktisch zugreifen kann. Ich verwende WPF, also habe ich es zu MainWindow.xaml.cs hinzugefügt, aber Sie können es überall früh in Ihrem Code hinzufügen. Denken Sie daran, diesen Methoden "statisch" hinzuzufügen, falls Sie sie benötigen.
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;
}
}
Fügen Sie zu Beginn Ihres Programms einen Verweis auf die Methode hinzu. In meinem Fall habe ich es zu MainWindow hinzugefügt, aber das Hinzufügen zu Main funktioniert auch.
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
Hoffe das hilft!
requireAdministrator
Berechtigungen angefordert wurden , und ClickOnce hat angefangen, sich darüber zu beschweren, dass es nicht unterstützt wirdrequireAdministrator
. Das Problem sollte sehr klar sein. ClickOnce sieht die Notwendigkeit einer Erhöhung in Ihrem Manifest (das Teil Ihrer Anwendung wird). Ich bin nicht sicher, was Sie hier mehr brauchen ...