c # - Hvordan ignorerer win32-undtagelse? modul proces

Indlæg af Hanne Mølgaard Plasc

Problem




    Dette spørgsmål er en nøjagtig kopi af:

    

            

  •             Hvordan ignorerer win32-undtagelse? modul proces
                    
                        1 svar
                    

            

  •     

Bedste reference


Dette er ikke det endelige svar, men bedre passer her og derefter i en kommentar. /questions/46785172/how-to-ignore-win32-exception-module-process


Prøv at bruge denne kode for at fange undtagelsen og udskrive den til konsollen. Så kan du se den fulde stacktrace i konsollen. Med denne stacktrace kan du yderligere løse fejlen.


Du forsøger nok at få adgang til en MainModule, hvor du ikke har adgang til det.


using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Threading;
namespace dll {
    class Program {
        static void Main(string[] args) {
            try {
                Process[] processlist = Process.GetProcesses();
                foreach(Process process in processlist) {
                    foreach(ProcessModule module in process.Modules) {
                        if(module.FileName.Contains("foo.dll")) {
                            Console.WriteLine(module.FileName);                           
                        }

                    }
                }
            }
            catch(Win32Exception ex) {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadLine();
        }
    }
}


Det mislykkes sandsynligvis på denne linje: foreach(ProcessModule module in process.Modules), så du ved, at den ikke kan få adgang til en eller flere af modulerne. Sandsynligvis på grund af systemrestriktioner.


Hvis du kun vil tjekke modulerne og derfor acceptere at ikke alle modulerne er markeret, kan du gøre dette.


using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Threading;
namespace dll {
    class Program {
        static void Main(string[] args) {
            int noErrorCount = 0;
            int errorCount = 0;
            Process[] processlist = Process.GetProcesses();
            foreach(Process process in processlist) {

                try {
                    foreach(ProcessModule module in process.Modules) {
                        if(module.FileName.Contains("foo.dll")) {
                            Console.WriteLine(module.FileName);
                        }
                        noErrorCount++;
                    }
                }
                catch(Win32Exception ex) {
                    errorCount++;
                }
            }
            Console.WriteLine("Modules checked: " + noErrorCount);
            Console.WriteLine("Modules with error(not checked): " + errorCount);
            Console.ReadLine();
        }
    }
}


Kode i et uendeligt sløjfe


using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Threading;
namespace dll {
    class Program {
        static void Main(string[] args) {
            try {
                while(true) {
                    int noErrorCount = 0;
                    int errorCount = 0;
                    Process[] processlist = Process.GetProcesses();
                    foreach(Process process in processlist) {

                        try {
                            foreach(ProcessModule module in process.Modules) {
                                if(module.FileName.ToLower().Contains("Kernel32.dll".ToLower())) {
                                    Console.WriteLine(module.FileName);
                                }
                                //Console.WriteLine(module.FileName);
                                noErrorCount++;
                            }
                        }
                        catch(Win32Exception ex) {
                            errorCount++;
                        }
                    }
                    Console.WriteLine("Modules checked: " + noErrorCount);
                    Console.WriteLine("Modules with error(not checked): " + errorCount);
                }
            }
            catch(Exception ex) {
                Console.WriteLine(ex.ToString());
                Console.ReadLine();
            }
        }
    }
}