Tarea: Elimine automáticamente todos los procesos secundarios si el proceso principal finaliza. Los procedimientos de los padres pueden darse por terminados no solo de manera correcta, sino también matando en ProcessExplorer, por ejemplo. ¿Cómo puedo hacerlo?Cómo termina el proceso secundario cuando finaliza el proceso primario en C#
Pregunta similar en С topic consejos para usar Objetos de trabajo. ¿Cómo usarlo en C# sin exportar DLL externo?
He intentado utilizar Job Objects. Sin embargo, este código no funciona correctamente:
var job = PInvoke.CreateJobObject(null, null);
var jobli = new PInvoke.JOBOBJECT_BASIC_LIMIT_INFORMATION();
jobli.LimitFlags = PInvoke.LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_PRIORITY_CLASS
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;
var res = PInvoke.SetInformationJobObject(job, PInvoke.JOBOBJECTINFOCLASS.JobObjectBasicLimitInformation, jobli, 48);
if (!res)
{
int b = PInvoke.GetLastError();
Console.WriteLine("Error " + b);
}
var Prc = Process.Start(...);
PInvoke.AssignProcessToJobObject(job, Prc.Handle);
PInvoke.SetInformationJobObject vuelve con el error. GetLastError devuelve el error 24. Sin embargo, PInvoke.AssignProcessToJobObject funciona y el proceso secundario se agrega a la cola de trabajos (puedo verlo en ProcessExplorer). Pero, debido a que PInvoke.SetInformationJobObject no funciona, el proceso generado se mantiene activo cuando elimino uno principal.
¿Qué es incorrecto en este código?
La otra respuesta a la pregunta parece ser buena para mí, solo pinvoke las funciones de kernel32. http://www.pinvoke.net/default.aspx/kernel32.assignprocesstojobobject –