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

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

  •  01-07-2019
  •  | 
  •  

Pregunta

Tú haces AssignProcessToJobObject y falla con "acceso denegado", pero sólo cuando estás ejecutando el depurador.¿Por qué es esto?

¿Fue útil?

Solución

Este me desconcertó durante unos 30 minutos.

En primer lugar, probablemente necesites un manifiesto UAC integrado en tu 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 ejecutas tu aplicación bajo el depurador, crea tu proceso en un objeto de trabajo.Del cual su proceso hijo debe poder separarse antes de que pueda asignarlo a su trabajo.Entonces (duh), necesitas especificar CREATE_BREAKAWAY_FROM_JOB en las banderas para CreateProcess).

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

Otros consejos

Esto parece molestarme con bastante frecuencia y, aunque es buena, la publicación de 1800INFORMATION no parece incluir una serie de razones y correcciones que parezcan útiles, por lo que parece que vale la pena publicar un resumen de por qué he visto que esto suceda.

  1. Al intentar resolver esto por usted mismo, tenga en cuenta que este problema puede ocurrir por diferentes razones 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.Su aplicación puede simplemente trabajar en CMD.EXE a pesar de fallar desde VSy Explorer.exe
  2. En mi caso, bajo Win7, parecía necesitar no comarse el elemento "Soporte" que indica la compatibilidad de Win7 desde el archivo App.Manifest.Esto parece solucionar el problema cuando se ejecuta desde Explorer.Para agregar un manifiesto, haga clic derecho en el proyecto, presione Agregar y busque 'Archivo de manifiesto de la aplicación'.
  3. Para que Visual Studio 2010 funcionara, parecía que necesitaba evitar que usara el Asistente de compatibilidad de programas. Tom Minka comparte dos formas de hacerlo aquí: https://stackoverflow.com/a/4232259/86375, Tenga en cuenta que tuve que reiniciar VS2010 para realizar los cambios sugeridos.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top