Die Zugriffsverletzung von BEx oder APPCRASH erfolgt auf Windows Server 2008 R2 mit dem Terminal Dienst.

Dieser Artikel hilft Ihnen beim Beheben der Zugriffsverletzung von BEx oder APPCRASH auf Windows Server 2008 R2 mit dem Terminal Dienst.

Original Version des Produkts:   Winsock
Ursprüngliche KB-Nummer:   2279689

Problembeschreibung

Sie können eine Zugriffsverletzung auftreten, wenn Ihre Anwendung:

  • Verwendet Winsock-API oder Crypto-API und kann eine DLL häufig dynamisch laden/entladen.
  • Ist eine Multithread-Anwendung.

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

Sample.exe Anwendung ist nicht mehr funktionsfähig.

Signatur des Problems:
Problem Ereignisname: APPCRASH
Anwendungsname: Sample.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 4afa1ed3
Name des Fehler Moduls: MSVCR80.dll
Fehler Modul Version: 8.0.50727.4927
Zeitstempel des Fehler Moduls: 4a2752ff
Ausnahme Code: 40000015
Ausnahme Offset: 000046b4
Betriebssystem Version: 6.1.7600.2.0.0.16.7
Gebietsschema-ID: 1041

Signatur des Problems:
Problem Ereignisname: BEx
Anwendungsname: Sample.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 4afa1ed3
Name des Fehler Moduls: mswsock.dll
Fehler Modul Version: 6.1.7600.16385
Zeitstempel des Fehler Moduls: 4a5bda77
Ausnahme Offset: 000016bf
Ausnahme Code: c0000005
Ausnahmedaten: 00000008
Betriebssystem Version: 6.1.7600.2.0.0.16.7
Gebietsschema-ID: 1041

Ursache

Die Hauptursache für dieses Problem ist eine Änderung, die in Windows Server 2008 R2 auf den Zeitpunkt vorgenommen wurde, zu dem das tsappcmp.dll Modul (Remote Desktop Dienste Application Compatibility DLL) initialisiert wird, was folglich dazu führt, dass Ihre Anwendung DLL-Funktionen aufruft, bevor Sie einen Link zu Funktionen innerhalb der dll einrichtet.

Lösung

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

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

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

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

    • Führen Sie die Eingabeaufforderung Visual Studio aus.

    • Geben Sie den folgenden Befehl ein.

      editbin.exe /TSAWARE <Program file name>
      
    • Sie können überprüfen, ob das Programm den Terminaldienst kennt, 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-Kennzeichen Verhaltens in Microsoft .NET Framework 3.5 SP1 .