example c++ c winapi createprocess

createprocess c++ example



AssignProcessToJobObject falla con el error "Acceso denegado" cuando se ejecuta en el depurador (2)

Hace AssignProcessToJobObject y falla con "acceso denegado", pero solo cuando se ejecuta en el depurador. ¿Por qué es esto?


Este me desconcertó por unos 30 minutos.

En primer lugar, es probable que necesite un manifiesto de UAC integrado en su aplicación ( como se sugiere aquí ). Algo como esto:

<?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>

En segundo lugar (y esta es la parte en la que me quedé atascado), cuando ejecuta su aplicación bajo el depurador, crea su proceso en un objeto de trabajo. De lo que el proceso de su hijo debe poder separarse antes de poder asignarlo a su trabajo. Entonces (duh), debe especificar CREATE_BREAKAWAY_FROM_JOB en los indicadores para CreateProcess ).

Si no se estaba ejecutando bajo el depurador, o su proceso principal estaba en el trabajo, esto no habría sucedido.


Esto parece morderme con bastante frecuencia, y aunque es bueno, la publicación de 1800INFORMATION no parece incluir una serie de razones y soluciones que parecen útiles, por lo que parece que vale la pena publicar un resumen de por qué he visto esto suceder.

  1. Al intentar resolverlo usted mismo, tenga en cuenta que este problema puede ocurrir por diferentes motivos cuando se ejecuta desde CMD.EXE, Explorer y Visual Studio. Intentar ejecutar el ejecutable que falla desde los lugares respectivos puede ayudar a identificar la causa del problema. Es posible que la aplicación solo encuentre trabajo desde CMD.EXE a pesar de que VS y Explorer.exe fallen
  2. En mi caso, en Win7, parecía necesitar des-comentar el elemento "supportedOS" que indica compatibilidad con Win7 desde el archivo app.manifest. Esto parece solucionar el problema cuando se ejecuta desde Explorer. Para agregar un manifiesto, haga clic con el botón derecho en el proyecto, presione Agregar y busque ''Archivo de manifiesto de la aplicación''.
  3. Para que Visual Studio 2010 funcione, parece que necesito evitar que use el Asistente de compatibilidad de programas, Tom Minka comparte dos formas de hacerlo aquí: https://.com/a/4232259/86375 , nota, tuve que reinicie VS2010 para tomar sus cambios sugeridos.