AssignProcessToJobObject échoue avec l’erreur «Accès refusé» lors de l’exécution sous le débogueur

Vous faites AssignProcessToJobObject et il échoue avec “access refusé”, mais uniquement lorsque vous exécutez le débogueur. Pourquoi est-ce?

Celui-ci m’a laissé perplexe pendant environ 30 minutes.

Tout d’abord, vous avez probablement besoin d’un manifeste UAC intégré à votre application ( comme suggéré ici ). Quelque chose comme ça:

            

Deuxièmement (et c’est le bit sur lequel je me suis coincé), lorsque vous exécutez votre application sous le débogueur, cela crée votre processus dans un object de travail. Ce que votre processus enfant doit pouvoir séparer avant de pouvoir l’atsortingbuer à votre travail. Donc (duh), vous devez spécifier CREATE_BREAKAWAY_FROM_JOB dans les indicateurs de CreateProcess ).

Si vous n’exécutiez pas sous le débogueur ou si votre processus parent était en cours, cela ne se serait pas produit.

Cela semble me piquer assez souvent, et même s’il est bon, le message de 1800INFORMATION ne semble pas inclure un certain nombre de raisons et de corrections qui semblent utiles, il semble donc intéressant de publier un résumé des raisons pour lesquelles j’ai vu cela se produire.

  1. Lorsque vous essayez de résoudre ce problème par vous-même, notez que ce problème peut se produire pour différentes raisons lors de l’exécution de CMD.EXE, de l’Explorateur et de Visual Studio. Essayer d’exécuter le fichier exécutable défaillant à partir des emplacements respectifs peut aider à identifier la cause du problème. Votre application peut simplement fonctionner à partir de CMD.EXE malgré l’échec de VS et Explorer.exe
  2. Dans mon cas, sous Win7, il semblait que je devais supprimer le commentaire de l’élément “supportedOS” indiquant la compatibilité Win7 à partir du fichier app.manifest. Cela semble résoudre le problème lors de l’exécution à partir de l’explorateur. Pour append un manifeste, cliquez avec le bouton droit sur le projet, cliquez sur Ajouter et recherchez “Fichier du manifeste d’application”.
  3. Pour que Visual Studio 2010 fonctionne, il semblait que je devais empêcher l’utilisation de l’Assistant Compatibilité des programmes. Tom Minka partage deux méthodes pour le faire ici: https://stackoverflow.com/a/4232259/86375 , notez qu’il me fallait redémarrez VS2010 pour prendre ses modifications suggérées.