2009-12-10 7 views
5

Ich habe eine WinForms-Anwendung, an der ich gerade arbeite. Es gibt ein kleines Stück Funktionalität, die als Administrator in Vista/Win7 ausgeführt werden muss. Ich verstehe, wie ich die angeforderteExecutionLevel für die Anwendung im Manifest festlegen kann. Der Trick ist, ich möchte nicht verlangen, dass der Benutzer die gesamte Anwendung als Administrator ausführt, nur ein Teil davon. Daher möchte ich, dass die meisten Funktionen als Invocer ausgeführt werden.Angeforderter Ausführungsgrad für eine DLL

Wenn ich die Admin-Funktionalität in eine DLL, gibt es eine Möglichkeit, es als RequireAdministrator zu markieren? Ich versuchte MT zu verwenden, um der DLL ein Manifest hinzuzufügen, aber das schien nicht zu funktionieren. Was muss ich tun?

Antwort

4

Nein, es gibt keine Möglichkeit, die Ausführungsstufe einer Anwendung auf DLL-Basis zu unterscheiden. Dies ist eine prozessweite Einstellung. Sie müssten einen anderen Prozess innerhalb Ihrer Anwendung aufrufen, der den Code in dieser DLL mit erhöhten Rechten ausführt.

Eine Option, die Sie tun müssen, ist, verwenden Sie entweder die Rundll oder Rundll32-Programm, um die DLL direkt ausführen. Dies ist ein eigenständiges Windows-Programm zum Laden und Ausführen einer bestimmten DLL. Sie können den Rundll-Prozess erhöhen und die Isolation erreichen, die Sie wünschen.

Googeln für Rundll gibt Ihnen viele Tipps, wie Sie es verwenden :).

+0

Kann eine DLL als eigener Prozess ausgeführt werden oder muss sie von einer EXE gestartet werden? – epotter

+0

@epotter Ich habe meine Antwort etwas zu diesem Thema aktualisiert. – JaredPar

3

Elevation ist per-Prozess, so dass Sie eine DLL nicht selbst erhöht haben können. Sie müssen die DLL in einem separaten, erhöhten Prozess hosten; oder Sie können den Höhen-COM-Moniker betrachten, und tun Sie es auf diese Weise.

Verwandte Themen