it-swarm.com.de

Wie erzwinge ich, dass meine .NET-Anwendung als Administrator ausgeführt wird?

Wie kann ich die Ausführung meines Programms als Administrator unter Windows 7 erzwingen, nachdem mein Programm auf einem Clientcomputer installiert wurde?

823
Gold

Sie möchten das Manifest ändern, das in das Programm eingebettet wird. Dies funktioniert in Visual Studio 2008 und höher: Projekt + Neues Element hinzufügen, "Anwendungsmanifestdatei" auswählen. Ändern Sie das <requestedExecutionLevel> -Element in:

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Der Benutzer erhält die Aufforderung UAC , wenn er das Programm startet. Mit Bedacht verwenden; Ihre Geduld lässt schnell nach.

1073
Hans Passant

Das Hinzufügen eines Elements requestedExecutionLevel zu Ihrem Manifest ist nur die halbe Miete. Sie müssen sich daran erinnern, dass UAC ausgeschaltet werden kann. Wenn dies der Fall ist, müssen Sie die Prüfung auf die alte Art und Weise durchführen und einen Fehlerdialog anzeigen, wenn der Benutzer kein Administrator ist
(Rufe IsInRole(WindowsBuiltInRole.Administrator) auf dem CurrentPrincipal deines Threads auf).

150
Anders

Die detaillierten Schritte sind wie folgt.

  1. Fügen Sie der Lösung eine Anwendungsmanifestdatei hinzu
  2. Anwendungseinstellung in "app.manifest" ändern
  3. Aktualisieren Sie das Tag "requiredExecutionLevel", um den Administrator zu benötigen.

Adding file in Solution

Select Application Manifest File

Select Manifest option

Update Manifest file

Beachten Sie, dass Sie mit diesem Code die Sicherheitseinstellungen von ClickOnce deaktivieren müssen. Gehen Sie dazu zu Eigenschaften -> Sicherheit -> ClickOnce-Sicherheit

60
Hassan Rahman

Ich habe Code implementiert, um es manuell zu machen:

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}
57
NG.

Sie können eine Manifestdatei in die EXE-Datei einbetten, wodurch Windows (7 oder höher) das Programm immer als Administrator ausführt.

Weitere Informationen finden Sie unter Schritt 6: Erstellen und Einbetten eines Anwendungsmanifests (Application Manifest, UAC) (MSDN).

42
David

Klicken Sie in Visual Studio 2008 mit der rechten Maustaste auf Project -> Add New Item und wählen Sie dann Application Manifest File.

In der Manifestdatei finden Sie das Tag requestedExecutionLevel, und Sie können die Stufe auf drei Werte festlegen:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

OR

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

OR

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

Um Ihre Anwendung als Administrator auszuführen, müssen Sie die mittlere auswählen.

19
Rashad Maqsood

Wie pro

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

sie möchten ein Anwendungsmanifest hinzufügen, wenn Sie noch keines haben oder nicht wissen, wie Sie eines hinzufügen sollen. Da einige Projekte nicht automatisch eine separate Manifestdatei hinzufügen, gehen Sie zunächst zu den Projekteigenschaften, navigieren Sie zur Registerkarte Anwendung und stellen Sie sicher, dass Ihr Projekt das Manifest am unteren Rand der Schaltfläche nicht ausschließt.

  • Klicken Sie mit der rechten Maustaste auf Projekt
  • Neues Element hinzufügen
  • Suchen Sie zuletzt die Anwendungsmanifestdatei und klicken Sie darauf
13

Klicken Sie in Visual Studio 2010 mit der rechten Maustaste auf Ihren Projektnamen. Klicken Sie auf "Windows-Einstellungen anzeigen", um eine Datei mit dem Namen "app.manifest" zu erstellen und zu öffnen. Ersetzen Sie in dieser Datei "asInvoker" durch "requireAdministrator", wie in den kommentierten Abschnitten der Datei erläutert.

12
Evolved

Eine andere Möglichkeit, dies nur im Code zu tun, besteht darin, zu ermitteln, ob der Prozess wie in der Antwort von @NG als admin ausgeführt wird. . Öffnen Sie dann die Anwendung erneut und schließen Sie die aktuelle.

Ich verwende diesen Code, wenn eine Anwendung nur Administratorrechte benötigt, wenn sie unter bestimmten Bedingungen ausgeführt wird, z. B. wenn sie sich selbst als Dienst installiert. Es muss also nicht die ganze Zeit als Administrator ausgeführt werden, wie es auch die anderen Antworten erzwingen.

Beachten Sie im folgenden Code, dass NeedsToRunAsAdmin eine Methode ist, die erkennt, ob unter den aktuellen Bedingungen Administratorrechte erforderlich sind. Wenn dies false zurückgibt, erhöht sich der Code nicht. Dies ist ein wesentlicher Vorteil dieses Ansatzes gegenüber den anderen.

Obwohl dieser Code die oben genannten Vorteile aufweist, muss er als neuer Prozess neu gestartet werden, der nicht immer Ihren Wünschen entspricht.

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);
}
10
TheLethalCoder

Sie können das Manifest mithilfe der ClickOnce-Sicherheitseinstellungen erstellen und anschließend deaktivieren:

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

Nachdem Sie darauf geklickt haben, wird im Eigenschaftenordner des Projekts eine Datei mit dem Namen app.manifest erstellt. Sobald dies erstellt wurde, können Sie die Option Enable ClickOnce Security Settings deaktivieren

Öffne diese Datei und ändere diese Zeile:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

zu:

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

Dies setzt voraus, dass das Programm Administratorrechte hat.

8
Yochai Timmer

Dies ist eine vereinfachte Version von this answer , oben von @NG

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch
    {
        return false;
    }
}
8
Hakan Fıstık