Comment élever les privilèges que lorsque c'est nécessaire?
Cette question s'applique à Windows Vista!
J'ai une application qui fonctionne normalement sans privilèges d'administration. Il y a une activité qui n'a besoin de privilèges d'administrateur, mais je ne veux pas lancer l'application elle-même avec des privilèges plus élevés lorsque je sais que la plupart du temps l'utilisateur habitude même être à l'aide de la fonctionnalité.
Je pense à propos de certains de la méthode par laquelle je peux élever les privilèges de l'application sur certains événements (comme appuyer sur un bouton). Exemple:
Si l'utilisateur clique sur ce bouton, puis il est invité avec une boîte de dialogue contrôle de compte d'utilisateur ou le consentement. Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Je ne crois pas qu'il est possible d'élever les processus en cours d'exécution. Il est intégré dans Windows Vista que des privilèges d'administrateur sont donnés à un processus au démarrage, ce que je comprends. Si vous regardez les différents programmes qui utilisent le contrôle de compte d'utilisateur, vous devriez voir qu'en fait, elles lancent un processus distinct à chaque fois une action administrative doit être effectuée (le Gestionnaire des Tâches est un, Paint.NET est une autre, cette dernière étant une .NET application, en fait).
La solution classique à ce problème est de spécifier les arguments de ligne de commande lors du lancement d'un processus élevés (abatishchev la suggestion est une façon de le faire), de sorte que le processus lancés sait que pour afficher une certaine boîte de dialogue, puis quittez après cette action a été réalisée. Ainsi, il devrait être à peine perceptible pour l'utilisateur qu'un nouveau processus a été lancé et puis quitté, et serait plutôt semblent comme si une nouvelle boîte de dialogue au sein de la même application a été ouvert (surtout si vous certains hackery pour rendre la fenêtre principale de l'élévation du processus enfant du parent processus). Si vous n'avez pas besoin de l'INTERFACE utilisateur pour les élevés de l'accès, même mieux.
Pour une discussion complète de l'UAC sous Vista, je vous recommande de voir cette très à l'article sur le sujet (des exemples de code en C++, mais je soupçonne que vous aurez besoin d'utiliser la WinAPI et de P/Invoke pour faire la plupart des choses en C# de toute façon). J'espère que vous maintenant de voir au moins la bonne démarche à adopter, bien que la conception d'un compatibles programme est loin d'être négligeable...
Comme il a été dit il y:
va exécuter le processus en tant qu'admin pour faire tout ce dont vous avez besoin avec le registre, mais de revenir à votre application avec la normale de privilèges.
Le site web MSDN suivant l'article 981778 décrit la manière de "s'auto-élever" une application:
http://support.microsoft.com/kb/981778
Il contient téléchargeable échantillons dans Visual C++, Visual C#, Visual Basic.NET.
Cette approche permet de contourner la nécessité de lancer un processus distinct, mais en fait c'est la demande initiale, qui est redémarré, de fonctionner comme une élévation de l'utilisateur. Néanmoins cela peut être très utile dans certains contextes où il n'est pas possible de dupliquer le code dans un autre fichier exécutable.
Pour supprimer l'élévation, vous avez besoin de quitter l'application.
Vous avez besoin d'un contrôle de compte d'utilisateur nom et le code à exécuter élevé comme un objet COM.
Voir cette question.
Documentation MSDN.
Peut-être quelqu'un vient dans maniable cet exemple simple:
Je sais que c'est un vieux post, mais c'est en réponse à quelqu'un d'autre qui vient à travers MarcP de la suggestion. La msdn post qu'il a fait allusion, en effet, ne redémarrez les applications dans tous les exemples de code. Les exemples de code utilisant la
runas
verbe déjà proposé dans d'autres suggestions.J'ai téléchargé le code pour être sûr, mais c'est à partir de l'original de l'article msdn: