Erhöhen einer COM-Komponente mit der Benutzerkontensteuerung in .NET

Ich habe eine gefundenArtikel zum Erhöhen eines in C ++ geschriebenen COM-Objekts durch AufrufenCoCreateInstanceAsAdmin. Was ich jedoch nicht finden oder tun konnte, ist eine Möglichkeit, eine Komponente meiner .NET (c #) -Anwendung als COM-Objekt zu implementieren und dieses Objekt dann aufzurufen, um die Aufgaben auszuführen, für die eine UAC-Erhöhung erforderlich ist. MSDN dokumentiert dies alsadmin COM-Objektmodell.

Mir ist bewusst, dass es möglich und recht einfach ist, die Anwendung (oder eine andere Anwendung) als Administrator zu starten, um die Aufgaben in einem separaten Prozess auszuführen (siehe z. B. diePost von Daniel Moth, aber was ich suche, ist eine Möglichkeit, alles aus der gleichen, nicht erhöhten ausführbaren .NET-Datei heraus zu tun. Auf diese Weise wird das COM-Objekt natürlich in einem neuen Prozess erzeugt, aber dank des transparenten Marshalling sollte der Aufrufer des .NET-COM-Objekts dies nicht (zu sehr) bemerken.

Überlegungen, wie ich ein in C # geschriebenes COM-Objekt aus einem C # -Projekt über das instanziieren könnteCoCreateInstanceAsAdmin API wäre sehr hilfreich. Daher bin ich wirklich daran interessiert zu lernen, wie man ein COM-Objekt in C # schreibt, das ich dann über die COM-Erhöhungs-APIs von C # aus aufrufen kann.

Es ist egal, ob das COM-Objekt mit erhöhten Rechten nicht im selben Prozess ausgeführt wird. Ich möchte einfach nicht die gesamte Anwendung mit erhöhten Rechten starten müssen. Ich möchte nur, dass das COM-Objekt, das den Code ausführt, erhöht wird. Wenn ich etwas in diese Richtung schreiben könnte:

// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]

public class ElevatedClass
{
    public void X() { /* do something */ }
}

und dann muss meine hauptanwendung einfach instanziierenElevatedClass durch dieCoCreateInstanceAsAdmin Anruf. Aber vielleicht träume ich nur.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage