Tác vụ: Tự động giết tất cả các tiến trình con nếu quá trình cha mẹ chấm dứt. Các thủ tục gốc có thể được chấm dứt không chỉ theo cách chính xác, mà còn bằng cách giết chết trong ProcessExplorer, ví dụ. Tôi có thể làm như thế nào?Quy trình con chấm dứt khi quá trình cha mẹ chấm dứt trong C#
Câu hỏi tương tự trong С topic lời khuyên để sử dụng Đối tượng công việc. Làm thế nào để sử dụng nó trong C# mà không xuất DLL bên ngoài?
Tôi đã cố gắng sử dụng Đối tượng công việc. Nhưng mã này không hoạt động chính xác:
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 trả về có lỗi. GetLastError trả về lỗi 24. Tuy nhiên, các công trình PInvoke.AssignProcessToJobObject và tiến trình con được thêm vào hàng đợi công việc (tôi có thể thấy nó trong ProcessExplorer). Nhưng, vì PInvoke.SetInformationJobObject không hoạt động - quá trình sinh sản vẫn còn sống khi tôi giết cha mẹ.
Tôi có gì không chính xác trong mã này?
Câu hỏi khác có vẻ tốt với tôi, chỉ cần ghim các chức năng từ kernel32. http://www.pinvoke.net/default.aspx/kernel32.assignprocesstojobobject –