Jak UAC podnieść składnik COM za pomocą .NET
Znalazłemartykuł o tym, jak podnieść obiekt COM napisany w C ++CoCreateInstanceAsAdmin
. Ale tego, czego nie udało mi się znaleźć ani zrobić, to sposób na zaimplementowanie komponentu mojej aplikacji .NET (c #) jako obiektu COM, a następnie wywołanie tego obiektu w celu wykonania zadań wymagających podniesienia UAC. MSDN dokumentuje to jakoadmin model obiektu COM.
Zdaję sobie sprawę, że uruchomienie aplikacji (lub innej aplikacji) jako administratora jest możliwe i całkiem łatwe, aby wykonać zadania w oddzielnym procesie (patrz na przykładpost od Daniela Motha, ale to, czego szukam, to sposób na zrobienie wszystkiego z tego samego, nie podniesionego pliku wykonywalnego .NET. Spowoduje to oczywiście zrobienie obiektu COM w nowym procesie, ale dzięki przejrzystemu marshallingowi obiekt wywołujący .NET COM nie powinien (zbyt) być tego świadomy.
Wszelkie pomysły, w jaki sposób mogę zainicjować obiekt COM napisany w C #, z projektu C #, poprzezCoCreateInstanceAsAdmin
API byłoby bardzo pomocne. Tak więc jestem bardzo zainteresowany nauką pisania obiektu COM w C #, który mogę następnie wywołać z C # za pośrednictwem interfejsów API podniesienia COM.
Nieważne, czy podniesiony obiekt COM nie działa w tym samym procesie. Po prostu nie chcę uruchamiać całej aplikacji; Chciałbym tylko podwyższyć poziom obiektu COM, który wykona kod. Gdybym mógł napisać coś na wzór:
// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]
public class ElevatedClass
{
public void X() { /* do something */ }
}
a następnie mieć moją główną aplikację tylko instanciateElevatedClass
przezCoCreateInstanceAsAdmin
połączenie. Ale może po prostu śnię.