Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk mendapatkan ID proses induk di .net menggunakan kod terurus?
Mencari kaedah yang boleh dipercayai secara konsisten untuk mendapatkan ID proses induk proses dalam. NET Aplikasi telah terbukti sukar. Banyak pendekatan yang ada bergantung pada panggilan khusus platform (p/invoke), yang boleh menjadi kompleks dan kurang mudah alih.
Penyelesaian yang mantap menggunakan p/invoke:
Walaupun kerumitan, penyelesaian P/Invoke yang berstruktur dengan baik menawarkan kebolehpercayaan yang luar biasa di seluruh sistem 32-bit dan 64-bit:
Kaedah halus ini mengenal pasti proses induk untuk aplikasi .NET anda atau mana -mana ID proses yang ditentukan. Pengendalian ralat dimasukkan untuk menguruskan situasi dengan anggun di mana proses induk tidak lagi berjalan. Perhatikan bahawa struktur
adalah penting untuk interoperabilitas yang betul dengan fungsi<code class="language-csharp">public static class ParentProcessHelper { [DllImport("ntdll.dll")] private static extern int NtQueryInformationProcess(IntPtr processHandle, int processInformationClass, ref PROCESS_BASIC_INFORMATION processInformation, int processInformationLength, out int returnLength); public static Process GetParentProcess() { return GetParentProcess(Process.GetCurrentProcess().Handle); } public static Process GetParentProcess(int processId) { Process process = Process.GetProcessById(processId); return GetParentProcess(process.Handle); } public static Process GetParentProcess(IntPtr handle) { PROCESS_BASIC_INFORMATION pbi = new PROCESS_BASIC_INFORMATION(); int returnLength; int status = NtQueryInformationProcess(handle, 0, ref pbi, Marshal.SizeOf(pbi), out returnLength); if (status != 0) throw new Win32Exception(status); try { return Process.GetProcessById(pbi.InheritedFromUniqueProcessId.ToInt32()); } catch (ArgumentException) { return null; // Parent process not found } } // Structure definition (required for P/Invoke) [StructLayout(LayoutKind.Sequential)] private struct PROCESS_BASIC_INFORMATION { public IntPtr Reserved1; public IntPtr PebBaseAddress; public IntPtr Reserved2; public IntPtr Reserved3; public IntPtr UniqueProcessId; public IntPtr InheritedFromUniqueProcessId; } }</code>asli.
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan ID proses induk di .net menggunakan kod terurus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!