2016-05-04 9 views
0

Ich habe ein Befehlszeilenprogramm für einen bestimmten Zweck. Ich starte dieses Dienstprogramm von einem COM DLL mit ShellExecuteEx-Funktion. Wenn ich ShellExecuteEx aufrufe, spezifiziere ich den Parameter lpVerb als "runas", so dass das Dienstprogramm gestartet wird. Ich rufe die COM-Schnittstelle Funktion von einem exe-Client bei seinem Start auf. Also, wenn ich die Client-Exe starte, wird das Dienstprogramm auch gestartet. Mein Problem ist, dass das Utility immer gestartet wird, da es immer auf die Bestätigung der Benutzerkontensteuerung hinweist. Ich kann das nicht ertragen, weil es während dieses Prozesses keinen manuellen Eingriff gibt. Also muss ich das Dienstprogramm gestartet werden, ohne die UAC-Eingabeaufforderung zu zeigen, aber immer noch erhöht, wenn ich die Client-Exe starte. Gibt es einen Weg, dies zu erreichen? Ich würde einige Änderungen bevorzugen, die innerhalb des Dienstprogramms selbst vorgenommen werden, wie z. B. das Ändern der Manifestdatei anstelle einiger Systemeinstellungen. Jede Hilfe wird geschätzt werden.So deaktivieren Sie die UAC-Eingabeaufforderung für eine bestimmte Anwendung

Antwort

0

Dies ist nicht möglich, die Art und Weise, die Sie beschreiben (Manifest Änderung), weil dies den Zweck der UAC besiegen würde.

Sie können jedoch eine geplante Aufgabe verwenden. Auf diese Weise ist eine Erhöhung mit Benutzerinteraktion nur einmal erforderlich (wenn die Aufgabe erstellt wird).

Werfen Sie einen Blick auf die Antwort, die ich hier gegeben habe: https://stackoverflow.com/a/36838171/1871033

Sie das gleiche tun, aber ohne Anmelde Trigger. Sie haben also eine geplante Aufgabe, die nicht von alleine ausgeführt wird, sondern existiert. Sie können dann schtasks.exe /run /tn YourTaskName ohne Höhe verwenden, um die Aufgabe mit erhöhten Rechten auszuführen.

+0

Aber ich starte die Anwendung von einer COM-DLL mit ShellExecuteEx. Es ist ein Befehlszeilendienstprogramm, das auch einige Argumente benötigt. Ich übergebe diese Argumente in ShellExecuteEx. Ist derselbe Mechanismus möglich, wenn ich eine geplante Aufgabe hinzufüge? Ich meine, anstatt ShellExecuteEx aufzurufen, sollte ich in der Lage sein, die Aufgabe von meinem COM DLL auszulösen. Dazu auch die Befehlszeilenargumente. Warten Sie dann, bis die Anwendung beendet wird (Aufgabe wird beendet), und fahren Sie dann fort. Ist das programmatisch möglich? Wenn ja, können Sie bitte einige Informationen dazu geben. – Partha

+0

Oh, ich sehe ... Wenn Sie Befehlszeilenargumente zur Laufzeit übergeben müssen, funktioniert dies nicht aus der Box. Sie müssten ein spezielles Werkzeug als Wrapper schreiben, das zum Beispiel Eingaben über eine Named Pipe akzeptiert oder es aus einer Textdatei an einer definierten Stelle liest - könnte dann auch ein Batch-Skript sein, das Sie über 'cmd/c' in der Geplante Aufgabe (in beiden Fällen müssen Sie vorsichtig sein, also bereinigen Sie die Eingabe, um sicherzustellen, dass Sie keine Sicherheitslücken bei der Rechteausweitung einfügen), oder schauen Sie sich einen Dienst an. Aber es ist in keiner Weise geradlinig. – CherryDT

+0

Ich muss insbesondere die UAC-Benachrichtigung deaktivieren, da meine Dienstanwendung auf einem Server starten soll, auf dem keine Benutzerinteraktion stattfindet. Trotzdem brauche ich Administratorrechte. Ich frage mich, ob es in Windows kein solches Szenario gibt, in dem eine Anwendung auf einem (nicht interaktiven) Dump-Server mit Administratorrechten gestartet werden muss? Was wird in einem solchen Szenario der dort verwendete Mechanismus sein? Ich hoffe wirklich, dass es eine Lösung geben kann, weil das oben erwähnte Szenario eine Voraussetzung für viele Leute sein kann – Partha