2009-06-24 6 views
5

Ich habe, was die UAC Development Guides als "Administrative Choice Application" bezeichnen. Wenn Sie wissen, was das ist, springen Sie zum nächsten Abschnitt.Wie kann ich eine Datei als "Standardbenutzer" in Vista kopieren (z. B. "Eine administrative Auswahlanwendung"), indem ich den Benutzer nach Administratorberechtigungen frage?

Hintergrund:

ich einen „Standard“ Benutzer haben die Möglichkeit zu lassen, will eine Run On Startup Option in den Einstellungen für meine Anwendung zu aktivieren/deaktivieren.

Da meine Anwendung pro Maschine ist (nicht pro Benutzer), muss entweder eine Verknüpfungsdatei im Startmenü/Programme/Autostart-Ordner gelöscht oder kopiert werden, was administrativen Zugriff erfordert, um diesen Vorgang auszuführen .

Also, was ich möchte, ist für die "User Account Control Credential Prompt" zu erscheinen und auf diese Weise, wenn der Benutzer ein Admin-Konto hat, können sie auch die Anmeldeinformationen eingeben. Offensichtlich sollen Anwendungen so konzipiert sein, dass der Benutzer nicht jedes Mal zu einem anderen Konto wechseln muss, wenn er etwas Administratives erledigen muss.

Auszug aus MSDN-Dokumentation:

Eine Administrative Wahl Anwendung

Ein erhöhter Prozess oder COM-Objekt

Die erstmalige Anwendung ohne Erhebung erfordert startet. Die Elemente in der Benutzeroberfläche, für die ein Administratorzugriffstoken erforderlich wäre, sind mit einem Schildsymbol zur Identifizierung versehen. Diese Dekoration weist den Benutzer darauf hin, dass für die Verwendung dieser Funktion die Zustimmung des Administrators erforderlich ist. Wenn die Anwendung feststellt, dass eine dieser Schaltflächen ausgewählt wurde, stehen die folgenden zwei Optionen zur Auswahl.

  • Die Anwendung startet ein zweites Programm mit ShellExecute(), um die administrative Aufgabe auszuführen. Dieses zweite Programm wäre mit einem requestedExecutionLevel von requireAdministrator gekennzeichnet, wodurch der Benutzer zur Genehmigung aufgefordert wird. Dieses zweite Programm würde mit einem vollständigen administrativen Zugriffstoken ausgeführt und wäre in der Lage, die gewünschte Aufgabe auszuführen. -OR-
  • Die Anwendung startet ein COM-Objekt mit CreateElevatedComObject(). Diese API würde das COM-Objekt mit einem vollständigen Token für den administrativen Zugriff nach der Genehmigung starten, und dieses COM-Objekt könnte die gewünschte Aufgabe ausführen.
  • Ich muss nur eine Datei kopieren ... scheint übermäßig, um einen neuen Prozess mit ShellExecute() zu verzweigen und ich weiß nicht genug über COM zu wissen, ob ich es verwenden könnte, um eine Datei zu kopieren. Ich hoffe, dass jemand einen Code schreiben kann, der eine Möglichkeit bietet, die Datei zu kopieren und im Idealfall auch erklärt, wie man ein MenuItem mit dem "Shield Decorator" schmückt.

    Hinweise:

    Ich habe an der UAC Demo provided by microsoft sah, die in mehreren Stackoverflow Beiträge wie (Request Windows Vista UAC elevation if path is protected?) auf Themen im Zusammenhang mit Berechtigungen verwiesen wird. Der Code hat nur ein Beispiel für das Aufrufen eines separaten Prozesses.

    Antwort

    2

    Ich landete in einer anderen Richtung.Ich hatte mein Installationsprogramm eine Startverknüpfung im Ordner Alle Benutzer/Startup erstellen, die ein Argument an die Anwendung "Startup" übergibt.

    Wenn die Anwendung gestartet wurde, würde ich nach der Existenz von arg [0] .equals ("Startup") suchen und dann überprüfen, ob Settings1.Default.RunOnStartup == true.

    Wenn beide Bedingungen zutreffen, würde ich die Anwendung sofort beenden. Wenn die Anwendung ohne dieses Argument gestartet wird (dh die Startmenü-Programmgruppe), wird die Anwendung normal geladen.

    Die Einstellung "RunOnStartup" ist eine benutzerdefinierte Einstellung, sodass jeder Benutzer Änderungen vornehmen kann, ohne andere zu beeinflussen.

    2

    Obwohl es noch mindestens einzubeziehen erscheint Neustart oder einen Prozess Laichen, können Sie etwas Hilfe finden Sie hier: UAC Shield for Elevation bei CodeProject.com

    +0

    Es ist ein Anfang. Vielen Dank! – blak3r