AssignProcessToJobObject échoue avec l '& # 8220; Accès refusé & # 8221; erreur lors de l'exécution sous le débogueur

StackOverflow https://stackoverflow.com/questions/89588

  •  01-07-2019
  •  | 
  •  

Question

Vous effectuez AssignProcessToJobObject et il échoue avec le message " accès refusé " mais uniquement lorsque vous exécutez le débogueur. Pourquoi est-ce?

Était-ce utile?

La solution

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

Tout d'abord, vous avez probablement besoin d'un manifeste de contrôle de compte d'utilisateur intégré dans votre application ( comme suggéré ici ). Quelque chose comme ça:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <!-- Identify the application security requirements. -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel
            level="asInvoker"
            uiAccess="false"/>
        </requestedPrivileges>
      </security>
    </trustInfo>
  </assembly>

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

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

Autres conseils

Cela semble me piquer assez souvent, et bien que le post de 1800INFORMATION ne semble pas inclure un certain nombre de raisons et de corrections qui semblent utiles, il est donc intéressant de poster 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, Explorer, et Visual Studio. Essayer d’exécuter le fichier exécutable défaillant à partir du endroits respectifs peuvent aider à identifier la cause du problème. Vous L'application peut simplement fonctionner à partir de CMD.EXE malgré l'échec de V.S. et Explorer.exe
  2. Dans mon cas, sous Win7, il me semblait nécessaire de ne pas commenter le "SupportedOS". élément indiquant la compatibilité Win7 à partir du fichier app.manifest fichier. Cela semble résoudre le problème lors de l'exécution à partir de l'explorateur. À ajoutez un manifeste, cliquez avec le bouton droit sur le projet, cliquez sur Ajouter et recherchez 'Fichier de 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 ici deux manières de procéder: https://stackoverflow.com/a/4232259/86375 , notez que je devais redémarrer VS2010 pour prendre en compte les modifications suggérées.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top