Esta publicación pretende ser una extensión de la respuesta de @Matt Howells, específicamente para aquellos que tienen problemas al usar Job Objects en Vista o Win7 , especialmente si obtiene un error de acceso denegado ('5') al llamar a AssignProcessToJobObject.
tl; dr
Para garantizar la compatibilidad con Vista y Win7, agregue el siguiente manifiesto al proceso padre .NET:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
<v3:security>
<v3:requestedPrivileges>
<v3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
</v3:requestedPrivileges>
</v3:security>
</v3:trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<!-- We specify these, in addition to the UAC above, so we avoid Program Compatibility Assistant in Vista and Win7 -->
<!-- We try to avoid PCA so we can use Windows Job Objects -->
<!-- See https://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed -->
<application>
<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
Tenga en cuenta que cuando agregue un nuevo manifiesto en Visual Studio 2012, ya contendrá el fragmento anterior, por lo que no necesita copiarlo desde escuchar. También incluirá un nodo para Windows 8.
explicación completa
Su asociación de trabajo fallará con un error de acceso denegado si el proceso que está iniciando ya está asociado con otro trabajo. Ingrese al Asistente de compatibilidad de programas, que, a partir de Windows Vista, asignará todo tipo de procesos a sus propios trabajos.
En Vista, puede marcar su aplicación para que sea excluida de PCA simplemente incluyendo un manifiesto de aplicación. Visual Studio parece hacer esto para las aplicaciones .NET automáticamente, por lo que está bien allí.
Un manifiesto simple ya no lo corta en Win7. [1] Allí, debes especificar específicamente que eres compatible con Win7 con la etiqueta en tu manifiesto. [2]
Esto me llevó a preocuparme por Windows 8. ¿Tendré que cambiar mi manifiesto una vez más? Aparentemente hay una ruptura en las nubes, ya que Windows 8 ahora permite que un proceso pertenezca a múltiples trabajos. [3] Por lo tanto, aún no lo he probado, pero imagino que esta locura terminará ahora si simplemente incluye un manifiesto con la información del sistema operativo compatible.
Consejo 1 : Si está desarrollando una aplicación .NET con Visual Studio, como lo hice yo, aquí [4] hay algunas buenas instrucciones sobre cómo personalizar el manifiesto de su aplicación.
Consejo 2 : Tenga cuidado al iniciar su aplicación desde Visual Studio. Descubrí que, después de agregar el manifiesto apropiado, todavía tenía problemas con PCA al iniciar desde Visual Studio, incluso si usaba Iniciar sin depurar. Sin embargo, el lanzamiento de mi aplicación desde Explorer funcionó. Después de agregar manualmente devenv para la exclusión de PCA usando el registro, las aplicaciones que usaban Job Objects de VS también comenzaron a funcionar. [5]
Consejo 3 : Si alguna vez desea saber si PCA es su problema, intente iniciar su aplicación desde la línea de comandos o copie el programa en una unidad de red y ejecútelo desde allí. PCA se deshabilita automáticamente en esos contextos.
[1] http://blogs.msdn.com/b/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are-not-an -installer-take-2-because-we-changed-the-rules-on-you.aspx
[2] http://ayende.com/blog/4360/how-to-opt-out-of-program-compatibility-assistant
[3] http://msdn.microsoft.com/en-us/library/windows/desktop/ms681949(v=vs.85).aspx : "Un proceso puede estar asociado con más de un trabajo en Windows 8"
[4] ¿Cómo puedo incrustar un manifiesto de aplicación en una aplicación usando VS2008?
[5] ¿Cómo detener el depurador de Visual Studio que comienza mi proceso en un objeto de trabajo?