Le défi:
Trouver une méthode systématiquement fiable pour obtenir l'ID de processus parent d'un processus dans les applications .NET s'est avérée difficile. De nombreuses approches existantes dépendent des appels spécifiques à la plate-forme (P / Invoke), qui peuvent être complexes et moins portables.
Une solution robuste utilisant p / invoke:
Malgré les complexités, une solution P / Invoke bien structurée offre une fiabilité exceptionnelle sur des systèmes 32 bits et 64 bits:
<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>
Cette méthode raffinée identifie efficacement le processus parent pour votre application .NET ou tout ID de processus spécifié. La gestion des erreurs est incluse pour gérer gracieusement les situations où le processus parent ne fonctionne plus. Notez que la structure PROCESS_BASIC_INFORMATION
est cruciale pour une interopérabilité correcte avec la fonction native NtQueryInformationProcess
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!