Mengakses Process.MainModule.FileName dalam C#: Mengelakkan Pengecualian Win32
Apabila cuba mengakses harta Process.MainModule.FileName dalam C#, pembangun mungkin menghadapi Win32Exception. Pengecualian ini biasanya ditemui semasa menghitung modul proses pada platform 64-bit, walaupun menyusun semula aplikasi untuk persekitaran 32-bit (x86) atau AnyCPU.
Kod yang dipersoalkan selalunya dalam bentuk berikut:
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
Untuk menangani isu ini, pembangun boleh memanfaatkan kod yang disediakan oleh Jeff Mercado, seperti yang dicadangkan dalam jawapan rujukan. Kod ini telah disesuaikan sedikit untuk mendapatkan semula laluan fail proses tertentu:
string s = GetMainModuleFilepath(2011);
Kaedah GetMainModuleFilepath menggunakan Instrumen Pengurusan Windows (WMI) untuk menanyakan kelas Win32_Process untuk sifat ExecutablePath:
private string GetMainModuleFilepath(int processId) { string wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId; using (var searcher = new ManagementObjectSearcher(wmiQueryString)) { using (var results = searcher.Get()) { ManagementObject mo = results.Cast<ManagementObject>().FirstOrDefault(); if (mo != null) { return (string)mo["ExecutablePath"]; } } } return null; }
Dengan menggunakan pendekatan ini, pembangun boleh memintas Win32Exception dan berjaya mendapatkan MainModule.FileName untuk proses yang ditentukan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Win32Exceptions Apabila Mengakses Process.MainModule.FileName dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!