J'ai trouvé un article sur la façon d'élever un objet COM écrit en C++ en appelant CoCreateInstanceAsAdmin
. Mais ce que je n'ai pas pu trouver ou faire, c'est un moyen d'implémenter un composant de mon application .NET (C#) en tant qu'objet COM puis d'appeler dans cet objet pour exécuter les tâches qui nécessitent une élévation UAC. MSDN documente cela comme admin COM object model.Comment UAC élever un composant COM avec .NET
Je suis conscient qu'il est possible et très facile de lancer l'application (ou une autre application) en tant qu'administrateur, pour exécuter les tâches dans un processus séparé (voir par exemple le post from Daniel Moth, mais ce que je cherche est un Ce faisant, bien sûr, l'objet COM apparaîtra dans un nouveau processus, mais grâce à la fonction de marshaling transparent, l'appelant de l'objet COM .NET ne devrait pas l'être (J'aurais aimé savoir comment créer un objet COM écrit en C#, à partir d'un projet C#, à travers l'API CoCreateInstanceAsAdmin
, ce qui serait très utile. un objet COM en C#, que je peux ensuite invoquer de C# à travers le COM API d'élévation.
Peu importe si l'objet COM élevé ne s'exécute pas dans le même processus. Je ne veux juste pas avoir à lancer toute l'application élevée; Je voudrais juste avoir l'objet COM qui va exécuter le code être élevé. Si je pouvais écrire quelque chose le long des lignes:
// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]
public class ElevatedClass
{
public void X() { /* do something */ }
}
et alors ma demande principale, juste instancie ElevatedClass
par l'appel CoCreateInstanceAsAdmin
. Mais peut-être que je ne fais que rêver.
Nous vous remercions de votre feed-back; exécuter un processus d'hébergement distinct n'est pas ce que j'avais l'intention. J'adorerais pouvoir interagir avec le composant COM élevé comme s'il s'agissait d'un objet local (c'est-à-dire que le composant COM élevé devrait pouvoir rappeler dans les autres objets .NET locaux). –