Mein VC6-debuggtes Programm lässt sich nicht beenden – weder mit Taskmanager Beheben durch andere tools wie ProcessKO durch ersatz durch aktuelle DM.dll und TLLOC.dll ist das problem weg!1. Download des Fixes
|
| Datei | Falsche Version | Richtige Version |
|---|---|---|
DM.dll |
6.0.8168.0 | 6.0.9782.0 |
TLLOC.dll |
6.0.8168.0 | 6.00.8168.292
|
2.) Mein VC6-debuggtes Programm lässt sich nicht beenden – weder mit Taskmanager noch mit ProcessKO. Was tun?
Problem
Nach dem Beenden einer Debugging-Sitzung mit `Shift+F5` bleibt der Prozess manchmal als "Geist" im Taskmanager hängen. Selbst `taskkill /F` und externe Tools wie ProcessKO haben keine Chance – Zugriff verweigert.
Ursache
Ein Versionskonflikt zwischen zwei DLLs deiner VC6-Installation nach dem Service Pack 6:
| Datei | Falsche Version | Richtige Version |
|-------|-----------------|------------------|
| `DM.dll` | 6.0.8168.0 | 6.0.9782.0 |
| `TLLOC.dll` | 6.0.8168.0 | 6.00.8168.292 |
Die `DM.dll` wurde durch SP6 aktualisiert, die `TLLOC.dll` blieb auf der alten Version. Diese Inkompatibilität führt unter modernen Windows-Versionen (7/10/11) zum beschriebenen Verhalten.
Lösung
Ersetze die beiden Dateien im Verzeichnis:
C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin\
Installation
1. VC6 komplett schließen
2. Navigiere zum `Bin`-Ordner (siehe Pfad oben)
3. Backup der alten Dateien erstellen (z.B. umbenennen in `DM.dll.old` und `TLLOC.dll.old`)
4. Entpacke die ZIP-Datei mit dem Passwort `vc6`
5. Kopiere die beiden DLLs in den `Bin`-Ordner (überschreiben)
6. VC6 neu starten
Nach dem Austausch funktioniert `Shift+F5` wieder sauber – keine Geisterprozesse mehr.
3.) Warum schlägt `TerminateProcess` bei debuggten Prozessen fehl?
Technischer Hintergrund
Windows unterscheidet zwischen zwei Prozesszuständen:
- Exiting – Der Prozess hat `ExitProcess` aufgerufen und befindet sich im normalen Beendigungsvorgang
- Terminating – Der Prozess wird von außen mit `TerminateProcess` beendet
Ein debuggter Prozess, der mit `Shift+F5` beendet wird, wechselt in den "exiting"-Zustand. In diesem Zustand verweigert das System jeden externen Eingriff – selbst mit Administratorrechten. `TerminateProcess` schlägt dann mit `ERROR_ACCESS_DENIED` (5) fehl.
Konsequenz
Kein externes Tool (Taskmanager, ProcessKO, `taskkill /F`) kann einen Prozess im "exiting"-Zustand terminieren. Die einzige Lösung ist die DLL-Korrektur oben.
4.) Kann ProcessKO debuggte VC6-Prozesse trotzdem terminieren?
Kurze Antwort
Nein. ProcessKO verwendet `TerminateProcess` wie alle anderen Tools auch. Wenn Windows den Prozess als "exiting" eingestuft hat, verweigert es jeden Zugriff.
Was ProcessKO stattdessen kann
ProcessKO kann nicht-debuggte Prozesse zuverlässig terminieren und ist besonders nützlich für:
- Hängende Anwendungen ohne Debugger
- Prozesse mit blockierten Fenstern
- Batch-weise Terminierung mehrerer Prozesse
Workaround für VC6-Debug-Prozesse (falls kein Download möglich)
Lass das Programm immer normal zu Ende laufen (z.B. über einen eigenen "Exit"-Button mit `::ExitProcess(0)`), statt `Shift+F5` zu drücken. Das umgeht den fehlerhaften Mechanismus komplett.
5.) Sicherheitshinweis
- Die DLLs sind original von Microsoft, nur passwortgeschützt wegen Virenscannern
- Prüfe nach dem Kopieren die digitale Signatur (Rechtsklick → Eigenschaften → Digitale Signaturen → Microsoft Corporation)
6.) Fazit
| Situation | Empfehlung |
|---|---|
| VC6-Hauptentwicklung | DLLs ersetzen (einmalig) – dann läuft alles sauber |
| Gelegentliches VC6-Debuggen | Workaround: Eigener Exit-Button mit ::ExitProcess(0) |
| Prozesse terminieren (nicht-debuggt) | ProcessKO verwenden – zuverlässig und einfach
|
FAQ 51: Aktualisiert am: 15 April 2026 17:37
