Posting ini dimaksudkan sebagai ekstensi untuk jawaban @Matt Howells, khususnya bagi mereka yang mengalami masalah dalam menggunakan Objek Pekerjaan di bawah Vista atau Win7 , terutama jika Anda mendapatkan kesalahan akses ditolak ('5') saat memanggil AssignProcessToJobObject.
tl; dr
Untuk memastikan kompatibilitas dengan Vista dan Win7, tambahkan manifes berikut ke proses induk .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>
Perhatikan bahwa ketika Anda menambahkan manifes baru di Visual Studio 2012 itu akan berisi potongan di atas sehingga Anda tidak perlu menyalinnya dari dengar. Ini juga akan mencakup simpul untuk Windows 8.
penjelasan lengkap
Asosiasi pekerjaan Anda akan gagal dengan kesalahan akses ditolak jika proses yang Anda mulai sudah dikaitkan dengan pekerjaan lain. Masukkan Asisten Kompatibilitas Program, yang, dimulai pada Windows Vista, akan menetapkan semua jenis proses untuk pekerjaannya sendiri.
Di Vista Anda dapat menandai aplikasi Anda untuk dikecualikan dari PCA hanya dengan menyertakan manifes aplikasi. Visual Studio tampaknya melakukan ini untuk aplikasi .NET secara otomatis, jadi Anda baik-baik saja di sana.
Manifes sederhana tidak lagi memotongnya di Win7. [1] Di sana, Anda harus secara spesifik menentukan bahwa Anda kompatibel dengan Win7 dengan tag di manifes Anda. [2]
Ini membuat saya khawatir tentang Windows 8. Apakah saya harus mengubah manifes saya sekali lagi? Rupanya ada celah di awan, karena Windows 8 sekarang memungkinkan proses menjadi milik beberapa pekerjaan. [3] Jadi saya belum mengujinya, tetapi saya membayangkan bahwa kegilaan ini akan berakhir sekarang jika Anda hanya menyertakan manifes dengan informasi OS yang didukung.
Kiat 1 : Jika Anda mengembangkan aplikasi .NET dengan Visual Studio, seperti saya sebelumnya, di sini [4] ada beberapa petunjuk bagus tentang cara menyesuaikan manifes aplikasi Anda.
Tips 2 : Berhati-hatilah dengan meluncurkan aplikasi Anda dari Visual Studio. Saya menemukan bahwa, setelah menambahkan manifes yang sesuai, saya masih memiliki masalah dengan PCA ketika meluncurkan dari Visual Studio, bahkan jika saya menggunakan Start tanpa Debugging. Namun, meluncurkan aplikasi saya dari Explorer berhasil. Setelah secara manual menambahkan devenv untuk pengecualian dari PCA menggunakan registri, memulai aplikasi yang menggunakan Object Ayub dari VS mulai bekerja juga. [5]
Tip 3 : Jika Anda pernah ingin tahu apakah PCA adalah masalah Anda, coba luncurkan aplikasi Anda dari baris perintah, atau salin program ke drive jaringan dan jalankan dari sana. PCA secara otomatis dinonaktifkan dalam konteks tersebut.
[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-karena-kita-mengubah-aturan-pada-Anda.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 : "Suatu proses dapat dikaitkan dengan lebih dari satu pekerjaan di Windows 8"
[4] Bagaimana saya bisa menanamkan manifes aplikasi ke dalam aplikasi menggunakan VS2008?
[5] Bagaimana cara menghentikan debugger Visual Studio memulai proses saya di objek pekerjaan?