2010-08-03 37 views
2

Dans mon application Win32, j'ai la possibilité d'exécuter des processus fils avec une entrée et une sortie redirigées vers des canaux anonymes que je crée et gère - tout cela fonctionne avec la fonction CreateProcess(). Cependant sur Win7 (et vraisemblablement Vista) si ce processus doit être exécuté en tant qu'administrateur, cela échoue. Donc, ce que je cherche est un moyen de faire l'équivalent de la commande "Exécuter en tant qu'administrateur" dans l'explorateur qui fera apparaître l'invite UAC standard et ensuite créer le processus avec les autorisations élevées. J'ai vu des articles qui parlent de l'utilisation de l'option "runas" pour faire ShellExecute, mais comme je le vois, je n'ai pas le contrôle dont j'ai besoin pour rediriger les entrées et sorties std vers mes pipes. Des suggestions?CreateProcess pour l'exécution en tant qu'administrateur

+0

C'est probablement impossible. Êtes-vous capable de modifier l'application enfant? – adf88

Répondre

2

Si vous mettez un manifeste sur l'application enfant et si vous utilisez ShellExecute pour le lancer, il utilisera le manifeste et il y aura une invite UAC. (Je préfère cela à l'approche "runas" dans la plupart des cas.) Cela peut vous permettre de lancer l'application comme vous le souhaitez sans vous soucier de l'UAC, et obtenir l'élévation du manifeste. Toutefois, vous pouvez rencontrer des problèmes si la partie "gérer" à laquelle vous faites référence implique une application de privilège inférieure communiquant avec une partie supérieure. L'UAC interdit cela.