84 votes

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:

alt text

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?

59voto

Noldorin Points 67794

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). Si vous n'avez pas besoin de l'INTERFACE utilisateur pour les élevés de l'accès, de même mieux.

Pour une discussion complète de l'UAC sous Vista, je vous recommande de voir ce très grâce à 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...

17voto

abatishchev Points 42425

Comme il a été dit il y a:

Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";

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.

13voto

FruitBreak Points 407

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.

5voto

ssg Points 20321

Ce n'est pas possible. Si vous regardez logiciel avoir cette fonctionnalité dans Windows (Gestionnaire de Tâches, les paramètres de Sécurité de l'éditeur, etc) ils fraient un nouveau processus lorsque vous cliquez sur le bouton.

5voto

Richard Points 54016

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X