2010-12-29 6 views
2

Ist es möglich, handle.exe (von sysinternals) von einem Dienst (in Windows7) auszuführen, ohne UAC deaktivieren zu müssen?Ausführen einer App, die ein Administratorkonto von einem Dienst erfordert

Der Dienst ist eine benutzerdefinierte c-app, die herausfinden muss, welcher Prozess eine Datei sperrt, auf die er zuzugreifen versucht, und handle.exe scheint eine gute Lösung zu sein, aber ich kann nicht damit arbeiten UAC wurde eingeschaltet. Diese App läuft die ganze Zeit, so kann ich keine UAC-Eingabeaufforderung während der Ausführung haben, aber es ist in Ordnung, wenn es beim Start angezeigt wird.

Handle.exe funktioniert problemlos von einem Admin-Befehlsprompt, schlägt jedoch fehl, wenn versucht wird, von einer normalen Eingabeaufforderung aus zu starten.

Ich rufe handle.exe von CreateProcess() und erhalten Sie die Ausgabe von Pipes. Ich denke, es sollte einen Weg geben, das zu lösen, aber ich kann es nicht herausfinden. Das Einrichten des Dienstes für die Anmeldung von einem Administratorkonto scheint nicht zu funktionieren.

+0

"Die Einrichtung des Dienstes für die Anmeldung von einem Administratorkonto scheint nicht zu funktionieren." - Meinst du, der Dienst wird überhaupt nicht gestartet, oder der Handle.exe-Aufruf schlägt in irgendeiner Weise fehl, oder? –

+0

Ich meine, dass es das Problem nicht gelöst hat. – Bergvall

Antwort

1

UAC hat keine Auswirkungen auf Dienste (betrifft nur interaktive Sitzungen), so dass es funktionieren sollte.

Wenn Sie jedoch nicht Ihr gesamtes Programm in einen Dienst verschieben möchten, gibt es bessere Möglichkeiten, dies zu tun, die zusätzlich zu Ihrem Hauptprogramm keinen separaten Dienstprozess erstellen, installieren und verwalten müssen.

  1. Wenn Ihr Programm erfordert Admin-Rechte an allen arbeiten, und das ist nicht der einzige Ort, es sie benötigen, dann könnten Sie Flagge Ihr Programm (über seine eingebettete Manifestressource) als Administratorrechte erfordern. Es wird dann immer eine UAC-Eingabeaufforderung auslösen, wenn es ausgeführt wird und mit vollen Administratorrechten ausgeführt wird, einschließlich der Möglichkeit, Handle.exe auszuführen.

  2. Wenn dies der einzige Ort ist, an dem Ihr Programm Administratorrechte benötigt, kann es sinnvoll sein, eine COM-DLL zu erstellen, die Ihren Handle.exe-Aufruf (oder einen anderen Verwaltungsvorgang) umschließt Verwenden Sie die Benutzerkontensteuerung, um erhöhte Aufrufe an diese Funktion von Ihrer nicht erhöhten App aus vorzunehmen. Sie werden dann jedes Mal eine UAC-Eingabeaufforderung auslösen, wenn Sie dieses COM-Objekt erstellen (eine erhöhte Version von). Sie können das COM-Objekt so lange offen halten, wie Sie möchten, und es jederzeit erstellen. Wann und wie oft die UAC-Eingabeaufforderung angezeigt wird, bleibt Ihnen überlassen.

Sowohl 1 & 2 sind Standard-Anwendungen von UAC so dass jede gute Dokumentation oder Tutorial auf UAC wird beschrieben, wie sie im Detail zu tun.

1

Möglicherweise möchten Sie sich die Win32-API-Methode CreateProcessWithLogonW ansehen. Hier gibt es auch ein erhöhtes VBS-Skript, das Sie hier lernen können: http://technet.microsoft.com/en-us/magazine/2007.06.utilityspotlight.aspx

+0

Wird dies nicht jedes Mal eine UAC-Eingabeaufforderung auslösen, wenn Handle.exe ausgeführt wird? Die Frage sagt, das ist unerwünscht. Oder meinst du das ganze Programm erhöhen (nicht nur Aufrufe von Handle.exe)? In diesem Fall können Sie das Programm jedoch so kennzeichnen, dass es den Administrator über sein Manifest erfordert. –

Verwandte Themen