CreateToolhelp32Snapshot stürzt ab



  • Nachdem alles prima lief, habe ich den halben Tag mit der Suche nach einem Fehler verbracht. Es geht um die sichere Methode, festzustellen, ob ein anderes Programm gerade aktiv ist. Fenstertitel reicht nicht aus. Weiterhin brauche ich den kompletten Anwendungspfad.

    Die Lösung:

    //1. Schleife
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
    //...
    if (Process32First(hProcessSnap, &pe32))
    {
      //Auswertung der Prozessinformationen ...
      //2. Schleife
      HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, pe32.th32ProcessID);
      if (Module32First (hModuleSnap, &me32))
      //Auswertung der ersten Modulinformationen
    } while (Process32Next(hProcessSnap, &pe32));
    

    Der Absturz erfolgte beim 2. CreateToolhelp32Snapshot, in welchem ich die Modul-Informationen hole. Hier reicht mir ein Module32First, da ich nur die Informationen für den Prozess selbst und nicht für die benutzten DLL's benötige.

    Ursache waren zwei(!!) tote Instanzen von Outlook, die zum Absturz führten. Nach Abschuss der Instanzen über den Taskmanager lief wieder alles einwandfrei.

    Nun kann ich bei einigen tausend Anwendern nicht davon ausgehen, das deren Taskliste zum Zeitpunkt der Programmausführung, wie ja auch in meinem Fall, sauber ist. Ein Hänger wäre sehr unangenehm (auch für die Hotline, da das Programm in diesem Falle bei ziemlich vielen Leuten gleichzeitig hängen dürfte).

    Hat jemand eine Idee?



  • vielleicht den HANDLE auf INVALID_HANDLE_VALUE prüfen



  • Hab ich jetzt mal als selbstverständlich angesehen. Natürlich
    werden die Handles auf INVALID_HANDLE_VALUE geprüft.

    Problem über Thread unter Mithilfe dieses Forums gelöst.

    Danke.


Anmelden zum Antworten