2010-06-17 3 views
3

Mon application ne nécessite que très rarement une élévation de privilèges ... Je dois référencer certains composants COM tiers qui ne fonctionnent correctement que lorsqu'ils sont exécutés en tant qu'administrateur. Je souhaite que mon application ne demande l'élévation de privilèges que lorsqu'elle en a besoin ... En général, je ne veux pas que mon application s'exécute en tant qu'administrateur à moins que j'aie besoin d'utiliser les composants COM de tierce partie.Élévation de privilèges seulement quand et si nécessaire

Je vois que CoCreateAsAdmin pourrait potentiellement résoudre le problème, mais l'auteur des composants n'a pas mis en place les entrées de registre requises, et je ne suis pas sûr de savoir comment utiliser CoCreateAsAdmin en C# et en conjonction avec Runtime-Callable- Wrapper créé par tlbimp.

Une autre solution serait d'engendrer un autre processus, mais je n'ai aucune expérience avec ceci pourtant ... Je ne veux pas créer une application complètement séparée ... Je serais heureux de créer un assembly qui fonctionne dans un processus élevé séparé si quelqu'un peut me montrer comment le faire fonctionner.

Merci ...

Répondre

3

privilèges de processus sont basés sur le jeton d'utilisateur que le processus est en cours d'exécution en vertu, qui est affecté uniquement lorsque le processus commence. Par conséquent, il n'y a aucun moyen d'élever votre processus après qu'il a déjà commencé. Le seul moyen fiable d'élever à l'exécution est de générer un nouveau processus.

Heureusement, c'est assez facile. Utilisez l'objet Process pour exécuter la ligne de commande qui va enregistrer et lancer le serveur COM. Assurez-vous que le manifeste de l'application .exe que vous exécutez le marque comme nécessitant une élévation, et que l'utilisateur sera automatiquement invité avant de s'exécuter.

Questions connexes