Frage

Für meine C#-App möchte ich beim Start der Anwendung nicht immer zur Erhöhung auffordern, aber wenn sie einen UAC-geschützten Ausgabepfad auswählen, muss ich eine Erhöhung anfordern.

Wie überprüfe ich also, ob ein Pfad UAC-geschützt ist, und wie fordere ich dann während der Ausführung eine Erhöhung an?

War es hilfreich?

Lösung

Der beste Weg, um festzustellen, ob sie eine Aktion nicht ausführen können, besteht darin, sie auszuprobieren und die Aktion abzufangen UnauthorizedAccessException.

Allerdings da @Danny Schlumpf weist richtig darauf hin Sie können nur ein COM-Objekt oder einen separaten Prozess erhöhen.

In den Windows SDK Cross Technology Samples gibt es eine Demonstrationsanwendung mit dem Namen UAC-Demo.Diese Demonstrationsanwendung zeigt eine Methode zum Ausführen von Aktionen mit einem erhöhten Prozess.Außerdem wird gezeigt, wie Sie herausfinden können, ob ein Benutzer derzeit Administrator ist.

Andere Tipps

Um eine Erhöhung während der Ausführung anzufordern, müssen Sie entweder:

  1. Verwenden Sie ein erhöhtes COM-Steuerelement, das eine Eingabeaufforderung anzeigt
  2. Starten Sie einen zweiten Prozess, der von Anfang an erhöht ist.

In .NET gibt es derzeit keine Möglichkeit, einen laufenden Prozess hochzustufen;Sie müssen einen der oben genannten Hacker-Vorgänge ausführen, aber das erweckt beim Benutzer lediglich den Eindruck, dass der aktuelle Prozess erhöht wird.

Die einzige Möglichkeit, die ich mir vorstellen kann, um zu überprüfen, ob ein Pfad UAC-erhöht ist, besteht darin, zu versuchen, ein paar triviale Schreibvorgänge auszuführen, während Sie sich in einem nicht erhöhten Zustand befinden, die Ausnahme abzufangen, die Erhöhung heraufzusetzen und es erneut zu versuchen.

Ich bin mir nicht sicher, ob es für Sie hilfreich ist, aber Sie können einen Blick auf diesen Blog-Beitrag werfen:

http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html

Möglicherweise möchten Sie den Benutzer darüber informieren, dass der Pfad geschützt ist, und ihn bitten, die Datei in einen „sichereren“ Bereich auszugeben.Auf diese Weise benötigt Ihre App keine Erhöhung.Ich bin mir sicher, dass es von Ihren Benutzern und dem, was Sie tun möchten, abhängt. Ich denke jedoch nicht, dass es zu viel ist, den Benutzer freundlich darüber zu informieren, dass es für Sie nicht in Ordnung ist, xyz in den Windows/System32-Ordner zu kopieren.

Wenn Ihr sekundäres Laufwerk über eigene Dateiberechtigungen verfügt, haben Sie beispielsweise eine andere Kopie von Windows darauf installiert.Es wird angezeigt.

Es wird auch gefragt, ob Dateien verwendet werden, was manchmal der Fall ist, wenn Sie den Windows Explorer im selben Verzeichnis geöffnet haben und die Datei mit einer Dateivorschau ausgewählt wird, die den Inhalt anzeigt ...Es gibt noch einige andere Merkwürdigkeiten, aber im Allgemeinen werden Sie um eine Dateiberechtigung gebeten, wenn die Datei verwendet wird oder es sich um ein vertrauliches Verzeichnis handelt.

Wenn Sie den FolderBrowserDialog in einer Schleife ausführen, teilen Sie dem Benutzer unbedingt den Grund dafür mit, damit er sich nicht über Ihre App ärgert.

Notiz:Es stinkt wirklich, dass es in .net keine Möglichkeit gibt, um Erlaubnis zu bitten, vielleicht p/invoke die Win32-API ...?

UAC kann Objekte basierend auf ihrer GUID heraufstufen. Dies würde (theoretisch) bedeuten, dass jede Klasse mit einer GUID heraufgestuft werden kann. Das UACDemo sollte auch zeigen, wie das geht

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top