Ich glaube nicht, dass es möglich ist, den aktuell laufenden Prozess zu verbessern. In Windows Vista ist integriert, dass einem Prozess nach meinem Verständnis Administratorrechte beim Start erteilt werden. Wenn Sie sich verschiedene Programme ansehen, die die Benutzerkontensteuerung verwenden, sollten Sie feststellen, dass sie jedes Mal, wenn eine Verwaltungsaktion ausgeführt werden muss, einen separaten Prozess starten (Task-Manager ist eines, Paint.NET ist ein anderes, letzteres ist tatsächlich eine .NET-Anwendung ).
Die typische Lösung für dieses Problem besteht darin, beim Starten eines Prozesses mit erhöhten Rechten Befehlszeilenargumente anzugeben (der Vorschlag von abatishchev ist eine Möglichkeit, dies zu tun), damit der gestartete Prozess nur ein bestimmtes Dialogfeld anzeigen und nach Abschluss dieser Aktion beenden kann abgeschlossen. Daher sollte es für den Benutzer kaum wahrnehmbar sein, dass ein neuer Prozess gestartet und dann beendet wurde, und es würde eher so aussehen, als ob ein neues Dialogfeld innerhalb derselben App geöffnet wurde (insbesondere, wenn Sie etwas Hackerei betreiben, um das Hauptfenster des zu erstellen erhöhter Prozess ein Kind des übergeordneten Prozesses). Wenn Sie keine Benutzeroberfläche für den erhöhten Zugriff benötigen, ist dies sogar noch besser.
Für eine vollständige Diskussion der Benutzerkontensteuerung unter Vista empfehle ich, dass Sie diesen Artikel zu diesem Thema lesen (Codebeispiele sind in C ++ enthalten, aber ich vermute, dass Sie WinAPI und P / Invoke verwenden müssen, um die meisten Aufgaben in C # auszuführen wie auch immer). Hoffentlich sehen Sie jetzt zumindest den richtigen Ansatz, obwohl das Entwerfen eines UAC-kompatiblen Programms alles andere als trivial ist ...
Wie dort gesagt wurde :
führt den Prozess als Administrator aus, um mit der Registrierung alles zu tun, was Sie benötigen, kehrt jedoch mit den normalen Berechtigungen zu Ihrer App zurück.
quelle
Der folgende MSDN-KB-Artikel 981778 beschreibt, wie Sie eine Anwendung selbst erhöhen:
http://support.microsoft.com/kb/981778
Es enthält herunterladbare Beispiele in Visual C ++, Visual C # und Visual Basic.NET.
Mit diesem Ansatz wird die Notwendigkeit umgangen, einen separaten Prozess zu starten. Tatsächlich wird jedoch die ursprüngliche Anwendung neu gestartet und als Benutzer mit erhöhten Rechten ausgeführt. Trotzdem kann dies in einigen Kontexten sehr nützlich sein, in denen es nicht praktikabel ist, Code in einer separaten ausführbaren Datei zu duplizieren.
Um die Erhebung zu entfernen, müssen Sie die Anwendung beenden.
quelle
Sie benötigen einen UAC-Moniker und den Code, um als COM-Objekt erhöht ausgeführt zu werden.
Siehe diese Frage.
Dokumentation zu MSDN.
quelle
Vielleicht ist jemand in diesem einfachen Beispiel hilfreich:
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber dies ist eine Antwort auf alle anderen, die auf MarcPs Vorschlag stoßen. Der MSDN-Beitrag, auf den er verwiesen hat, startet tatsächlich die Anwendungen in allen Codebeispielen neu. Die Codebeispiele verwenden die
runas
bereits in anderen Vorschlägen vorgeschlagene Verb.Ich habe den Code heruntergeladen, um sicherzugehen, aber dies ist aus dem ursprünglichen msdn-Artikel:
quelle