2010-10-15 17 views
2

Lorsqu'un programme d'installation (créé par Inno Setup) lance un processus, le processus est toujours exécuté en tant que privilège administrateur. -parce que le programme d'installation avait été exécuté en tant qu'administrateur.Comment exécuter un processus en tant que privilège utilisateur actuel à partir d'un processus administrateur

Je souhaite exécuter le processus enfant en tant que privilège de l'utilisateur actuel.
Y a-t-il un bon moyen?

+1

Note: Je recommanderais d'utiliser la réponse de Larry Osterman, alors qu'il travaille sur DEVELOPING Windows at MS (voir son blog à http://blogs.msdn.com/b/larryosterman/). Puisque le code pointé par Bradley est un kludge (comme il le fait pour les points), il pourrait cesser de fonctionner à tout moment. –

Répondre

0

Bien qu'il ne soit pas considérée comme la meilleure pratique (ou même de bonnes pratiques), il est possible de lancer un processus à moyen IL d'un processus IL haute/admin:

See this post on codeproject

Je peux confirmer que ce code fonctionne sur Vista 32 et 64 bits avec et sans UAC activé.

+0

Oh, je vais essayer. Merci. – Benjamin

+0

Oui! Ça marche. Merci Brad. – Benjamin

+4

Cela peut échouer de plusieurs façons: A) Explorer n'est pas en cours d'exécution. B) L'explorateur est élevé. C) Explorateur s'exécute en tant qu'utilisateur différent parce que le service d'ouverture de session secondaire aka runas a été utilisé: Explorer.exe = User1, cmd.exe (ou un autre processus) = User2 (cmd.exe démarré par runas, c'est l'utilisateur que vous voulez YourElevated.exe = (Admin) User3 – Anders

13

Cette question a lieu en interne tous les 3 ou 4 mois chez MSFT.

La réponse que les gens de sécurité donnent est: Vous ne pouvez pas. Lorsque le jeton de processus élevé est créé, des modifications apportées au jeton ne peuvent pas être annulées. Votre meilleur pari est d'avoir une application de lancement qui exécute votre programme d'installation élevé et puis lorsque le programme d'installation élevée est terminée, tourne autour et exécute votre processus enfant.

+0

Je n'arrête pas de le répéter aux gens, mais ils n'écoutent jamais. Enfin, quelqu'un de MS parle. – Anders

+0

Hey, une réponse de Larry Osterman lui-même! La solution acceptée ressemblait un peu à un kludge et cela le confirme. Sans rapport: Il serait également bon si vous pouvez convaincre Raymond Chen de répondre aux questions ici lorsque sa file d'attente de blog atteint deux ans :-). –

+0

Totalement hors sujet, mais sa file d'attente est de plus de 2 ans à ce stade :). –