Wie kann ich beim Starten des Programms Administratorrechte anfordern?

79

Ich benötige meine Software, um unter Windows Vista als Administrator ausgeführt werden zu können (wenn jemand sie ohne Administratorrechte ausführt, stürzt sie ab).

Beim Starten anderer Software wurde vom System die Meldung "Diese Software wird als Administrator ausgeführt. Möchten Sie fortfahren?" Angezeigt. als die App versuchte, Administratorrechte zu erwerben.

Wie fordere ich Administratorrechte an, wenn ich eine c # -App unter Windows Vista ausführe?

Arsen Zahray
quelle
6
Bitte vergessen Sie nicht, dass dies nur das zugrunde liegende Problem verbirgt und es nicht behebt. Selbst wenn Ihr Programm wirklich Administratorrechte benötigt, sollte es nicht abstürzen, wenn es diese nicht erhält. Die wahrscheinlichste Ursache ist, dass Sie nach einem Systemaufruf nicht nach einem Fehlerzustand suchen.
Harry Johnston

Antworten:

142

Fügen Sie Ihrer Manifestdatei Folgendes hinzu:

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

Sie können auch highestAvailablefür das Level verwenden.

Informationen zum Einbetten von Manifestdateien finden Sie hier:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

PS: Wenn Sie keine Manifestdatei haben, können Sie einfach eine neue hinzufügen:

Klicken Sie in Visual Studio mit der rechten Maustaste auf Projekt -> Element hinzufügen -> Anwendungsmanifestdatei auswählen (unter Allgemein für Visual C # -Elemente).

Die hinzugefügte Datei enthält bereits den obigen Teil. Ändern Sie einfach die Ebene in requireAdministratorvonasInvoker

Manojlds
quelle
2
Erwähnenswert ist, dass Sie, wenn Sie auf diese Weise eine Anwendungsmanifestdatei in VS hinzufügen, dort eine Vorlage mit vielen anderen Optionen erhalten (z. B. dass Ihre App nur unter Windows 10 und höher funktioniert). Getestet unter VS2017.
Per Lundberg
@PerLundberg - Nicht erwähnenswert, weil der ursprüngliche Fragesteller nicht danach gefragt hat - Er fragte nach Administratorrechten
Momoro
2
@Momoro Fragen zu SO sind nicht nur für das OP, sondern zum größeren Nutzen der Community. Andere Leute könnten diese Frage finden, wenn sie nach anderen Lösungen suchen, nicht nur genau das , wonach das OP gefragt hat. Und im Allgemeinen schadet es nicht, Menschen zu lehren, "Sie können diese Dinge mit Anwendungsmanifesten tun".
Per Lundberg
Ich habe nichts Unhöfliches angedeutet (Entschuldigung, wenn ich auf diese Weise gestoßen bin). Ich habe nur alte Antworten / Fragen gelesen und war irgendwie verwirrt: D
Momoro
14

Fügen Sie dieses XML in eine Datei mit dem Namen yourexename.exe.manifest ein:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</assembly>
Steve Danner
quelle
-1

Für F # Visual Studio 2013 hat es /win32manifestfür mich funktioniert , einschließlich einer Manifestdatei, die eine Administratorerhöhung mithilfe des FSharp-Compiler- Flags wie folgt anfordert . Bei einer Projektausgabe mit dem Namen "App.Exe"

  1. Erstellen Sie eine Datei mit dem folgenden Inhalt (zur Vereinfachung können Sie die Datei zum Projekt hinzufügen. Stellen Sie sicher, dass es Build Actionsich None' andum "In Ausgabe iskopieren" . By convention such a file is named handelt. Kopieren Sie nicht App.Exe.manifest`. Wenn Sie uiAccess (Benutzeroberfläche) benötigen, die Assembly muss stark benannt sein.

    <?xml version="1.0" encoding="utf-8" ?>
    <asmv1:assembly manifestVersion="1.0" 
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="App" />
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
  2. Bearbeiten Sie das Other flags:Eingabefeld des Projektdialog-Build-Panels so , dass es Folgendes enthält : /win32manifest:<ApplicationManifestFile>. Zum Beispiel in diesem Fall /win32manifest:App.Exe.manifest.

George
quelle