Zugriffsverletzung von BEX oder APPCRASH tritt unter Windows Server 2008 R2 mit Terminaldienst auf.

Dieser Artikel hilft Ihnen, die Zugriffsverletzung von BEX oder APPCRASH unter Windows Server 2008 R2 mit Terminaldienst zu beheben.

Ursprüngliche Produktversion: Winsock
Ursprüngliche KB-Nummer: 2279689

Problembeschreibung

Möglicherweise tritt eine Zugriffsverletzung auf, wenn Ihre Anwendung:

  • Verwendet die Winsock-API oder kryptografische API und kann häufig eine DLL dynamisch laden/entladen.
  • Eine Multithreadanwendung.

Wenn die Zugriffsverletzung auftritt, wird die folgende Fehlermeldung generiert. Möglicherweise erhalten Sie APPCRASH- oder BEX-Ereignisfehler.

Sample.exe Anwendung funktioniert nicht mehr.

Problemsignatur:
Problemereignisname: APPCRASH
Anwendungsname: Sample.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 4afa1ed3
Name des Fehlermoduls: MSVCR80.dll
Fehlermodulversion: 8.0.50727.4927
Zeitstempel des Fehlermoduls: 4a2752ff
Ausnahmecode: 40000015
Ausnahmeoffset: 000046b4
Betriebssystemversion: 6.1.7600.2.0.0.16.7
Gebietsschema-ID: 1041

Problemsignatur:
Name des Problemereignisses: BEX
Anwendungsname: Sample.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 4afa1ed3
Name des Fehlermoduls: mswsock.dll
Fehlermodulversion: 6.1.7600.16385
Zeitstempel des Fehlermoduls: 4a5bda77
Ausnahmeoffset: 000016bf
Ausnahmecode : c0000005
Ausnahmedaten: 00000008
Betriebssystemversion: 6.1.7600.2.0.0.16.7
Gebietsschema-ID: 1041

Ursache

Die Grundursache dieses Problems ist eine Änderung, die in Windows Server 2008 R2 an den Zeitpunkt vorgenommen wurde, zu dem das tsappcmp.dll-Modul (Anwendungskompatibilitäts-DLL für Remotedesktopdienste) initialisiert wird. Dies bewirkt, dass Ihre Anwendung DLL-Funktionen aufruft, bevor sie einen Link zu Funktionen in der DLL herstellt.

Lösung

Um dieses Problem zu beheben, führen Sie eine der folgenden vier Optionen aus:

  1. Schließen Sie die Anwendung, für die der Fehler auftritt, aus der Datenausführungsverhinderung (Data Execution Prevention, DEP) aus.

  2. Fügen Sie die /TSAWARE-Linkeroption hinzu, um Ihre Anwendung zu erstellen.

  3. Fügen Sie die Option /TSAWARE mit editbin.exe Tool hinzu.

    • Führen Sie die Eingabeaufforderung von Visual Studio aus.

    • Geben Sie den folgenden Befehl ein.

      editbin.exe /TSAWARE <Program file name>
      
    • Sie können bestätigen, dass das Programm den Terminaldienst erkennt, indem Sie den folgenden Befehl ausführen.

      editbin.exe /headers <Program file name>
       :
       8540 DLL characteristics
       Dynamic base
       NX compatible
       No structured exception handler
       Terminal Server Aware
      

Weitere Informationen zum TSAware-Flag finden Sie unter Ändern des TSAware-Flagverhaltens in .NET Framework 3.5 SP1.