Нарушение доступа BEX или APPCRASH происходит в Windows Server 2008 R2 со службой терминалов.

Эта статья поможет устранить нарушение доступа BEX или APPCRASH в Windows Server 2008 R2 со службой терминалов.

Исходная версия продукта: Winsock
Исходный номер базы знаний: 2279689

Симптомы

Вы можете столкнуться с нарушением доступа, когда приложение:

  • Использует API Winsock или API шифрования и может часто загружать или выгружать библиотеку DLL динамически.
  • Многопоточное приложение.

При возникновении нарушения доступа создается следующее сообщение об ошибке. Вы можете получить сообщение об ошибке события APPCRASH или BEX.

приложение Sample.exe перестало работать.

Сигнатура проблемы :
Имя события проблемы: APPCRASH
Имя приложения: Sample.exe
Версия приложения: 0.0.0.0
Метка времени приложения: 4afa1ed3
Имя модуля сбоя: MSVCR80.dll
Версия модуля сбоя: 8.0.50727.4927
Метка времени модуля сбоя: 4a2752ff
Код исключения: 40000015
Смещение исключения: 000046b4
Версия ОС: 6.1.7600.2.0.0.16.7
Код языкового стандарта: 1041

Сигнатура проблемы :
Имя события проблемы: BEX
Имя приложения: Sample.exe
Версия приложения: 0.0.0.0
Метка времени приложения: 4afa1ed3
Имя модуля сбоя: mswsock.dll
Версия модуля сбоя: 6.1.7600.16385
Метка времени модуля сбоя: 4a5bda77
Смещение исключений: 000016bf
Код исключения : c0000005
Данные исключения: 00000008
Версия ОС: 6.1.7600.2.0.0.16.7
Код языкового стандарта: 1041

Причина

Первопричиной этой проблемы является изменение, внесенное в Windows Server 2008 R2, к моменту инициализации модуля tsappcmp.dll (библиотека DLL с совместимостью приложений служб удаленных рабочих столов), что, следовательно, приводит к тому, что приложение вызывает функции DLL перед установкой связи с функциями в библиотеке DLL.

Решение

Чтобы устранить эту проблему, выполните один из следующих четырех вариантов:

  1. Исключите приложение с ошибкой, возникающей из защиты от выполнения данных (DEP).

  2. Добавьте параметр компоновщика /TSAWARE для сборки приложения.

  3. Добавьте параметр /TSAWARE с помощью средства editbin.exe.

    • Запустите командную строку Visual Studio.

    • Введите следующую команду.

      editbin.exe /TSAWARE <Program file name>
      
    • Вы можете убедиться, что программа знает о службе терминала, выполнив команду .

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

Дополнительные сведения о флаге TSAware см. в статье Изменение поведения флага TSAware в платформа .NET Framework 3.5 с пакетом обновления 1 (SP1)