Ein zugegebenermaßen etwas lästiges Problem tauchte die vergangenen Wochen bei einem Kunden auf. Immer wenn ein vom Kunden selbst erstelltes Programm abgestürzt ist, konnte man sich nicht mehr per Remotedesktopverbindung (RDP) verbinden.

Als Fehlermeldung erschien immer “Der angeforderte Vorgang konnte nicht ausgeführt werden, da die Remotedesktopdienste derzeit ausgelastet sind. Versuchen Sie es in einigen Minuten noch einmal. Andere Benutzer können sich normalerweise weiterhin anmelden.”

Betroffen ist dann nur die Benutzersitzung, in der das Programm ausgeführt wurde. Verbindungen von weiteren entsprechend berichtigten Benutzerkonten oder weiteren Administrator-Konten bleiben von dieser “Sperre” verschont.

Via Task-Manager findet sich der Prozess “WerFault.exe” (Windows-Problemberichterstattung) innerhalb der Benutzersitzung und kann einfach beendet werden. Sobald dieser Prozess nicht mehr existiert kann man sich wieder verbinden.

Die Ironie bei dieser Geschichte ist, das die Fehlerberichterstattung auf dem betroffenen Windows Server 2012 R2 Standard bereits deaktiviert ist:

Dennoch kommt es zu dem beschriebenen Verhalten. Bis (hoffentlich) der zuständige Entwickler seinen Prozess im Griff hat oder geklärt ist was da Schief läuft, dient als Workaround folgendes Batch-Skript, das via Aufgabe (mit einem anderen Benutzerkonto oder als SYSTEM) regelmäßig ausgeführt wird:

@echo off

tasklist | find /i "werfault.exe"

rem 0 gefunden
rem 1 nicht gefunden

if %errorlevel% equ 0 (
 echo %date% - %time% - WerFault.exe gefunden >> DetectWerFault.log
 taskkill /im "WerFault.exe" /f >> DetectWerFault.log
)

Die If-Bedingung kann man noch mit SMTPsend und mehr erweitern, damit man eine Benachrichtigung erhält, wenn der Prozess mal gefunden wurde.

Quellen

Microsoft – Powershell – Disable-WindowsErrorReporting

Lifewire – How to Disable Error Reporting in Windows