2008-09-18 16 views

Respuesta

20

Esto me desconcertó durante unos 30 minutos.

En primer lugar, probablemente necesite un manifiesto de UAC incrustado en su aplicación (as suggested here). 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 que se quedó atascado en), cuando se está ejecutando la aplicación en el depurador, se crea en el proceso de un objeto de trabajo. De lo que el proceso de su hijo debe poder separarse antes de poder asignarlo a su trabajo. Entonces (duh), necesita 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.

4

Esto parece muérdeme muy a menudo, y aunque está bien, no parece el post de 1800INFORMATION para incluir una serie de razones y correcciones que parecen útiles, por lo que merezca la pena para publicar un resumen de por qué he visto que esto suceda .

  1. Al tratar de resolver esto por sí mismo, nota 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 el lugares respectivos puede ayudar a identificar la causa del problema. Puede que la aplicación solo encuentre trabajo desde CMD.EXE a pesar de fallar en V.S. y Explorer.exe
  2. En mi caso, bajo Win7, que parecían necesitar un-comentar los "supportedOS" elemento que indica la compatibilidad Win7 del archivo app.manifest . Esto parece solucionar el problema cuando se ejecuta desde Explorer. Para añadir un manifiesto, haga clic derecho sobre el proyecto, golpeó Añadir, y encontrar 'Aplicación archivo de manifiesto'.
  3. Para que funcione Visual Studio 2010, parece que necesito evitar que use el Asistente de compatibilidad de programas, Tom Minka comparte dos formas de hacerlo aquí: https://stackoverflow.com/a/4232259/86375, nota, tuve que reiniciar VS2010 para llevar a cabo los cambios sugeridos.
Cuestiones relacionadas