2014-01-21 2 views
2

Я использую DCEF3 (https://code.google.com/p/dcef3/) с Delphi 7.CEF (Chromium Embedded Framework) против DEP (Data Execution Prevention)

Версия CEF, внедренный с DCEF, является 3.1547.1412.

Проблема

На машинах с Windows 2008 R2, несколько раз, когда мои загрузки приложения, она падает с событием типа BEX.

я только смог решить аварии Деактивация DEP на окнах, для этого я использовал быструю команду:

bdcedit /set nx AlwaysOff 

Но это не может быть решением.

Я не могу заставить своих пользователей отключить DEP на своих серверах.

Вот отчет APPCRASH (на португальском):

Assinatura do problema: 
     Nome do Evento de Problema:   BEX 
     Nome do Aplicativo:       MyExecutable.exe 
     Versão do Aplicativo:       1.1.0.1 
     Carimbo de Data/Hora do Aplicativo:   2a425e19 
     Nome do Módulo de Falhas:   dhcpcsvc6.DLL 
     Versão do Módulo de Falhas:   6.1.7601.17970 
     Carimbo de Data/Hora do Módulo de Falhas:    50745f7c 
     Deslocamento de Exceção:    00001730 
     Código de Exceção:       c0000005 
     Dados de Exceção:        00000008 
     Versão do sistema operacional:  6.1.7601.2.1.0.18.10 
     Identificação da Localidade:    1046 
     Informações Adicionais 1:     a7aa 
     Informações Adicionais 2:     a7aa91f17ea749d42a4de3b390fa5b3d 
     Informações Adicionais 3:     a7aa 
     Informações Adicionais 4:     a7aa91f17ea749d42a4de3b390fa5b3d 

Может кто-нибудь помочь мне найти корень проблемы или какую-то информацию о том, почему это происходит?

+0

Можете ли вы воспроизвести это с помощью небольшого тестового приложения с встроенным хромом? Если так, то людям будет намного легче ответить. Ваше большое приложение может делать любое количество вещей, которые плохо взаимодействуют с CEF. Вы ищете [SSCCE] (http://sscce.org/), который может быть затруднен к тому времени, когда вы вставляете компоненты, но, пожалуйста, сделайте все возможное. –

+0

Также [эта статья указывает, что SysUtils в Delphi 7 может запускать DEP] (http://www.prestwood.com/ASPSuite/KB/Document_View.asp?QID=100651), и вам необходимо обновиться до D2005 или более поздней версии, чтобы исправить Это. (Тем не менее, статья ссылается на патч.) Delphi 7 невероятно древняя, поэтому неудивительно, что это не так, что неприемлемо для версий Windows, написанных после ее выхода. Мое стандартное предложение любому, кто использует D7, в любом случае обновить :) –

+0

@David: эта проблема начинается после того, как я встроил CEF, и я не могу перейти на новый delphi. Я попытаюсь создать тестовое приложение, но я не гарантирую, что воспроизведу проблему. –

ответ

2

В комментарии вы ссылаетесь на forum that explains that Chromium intentionally enables data execution prevention по телефону SetProcessDEPPolicy. DEP is known to interfere with Delphi 7. В этом свете, я вижу три решения (перечислены в порядке убывания предпочтения):

  1. Обновление до версии Delphi, который меньше, чем десять лет назад. Вы получите RTL, который распознает DEP.
  2. Как упоминалось в форуме, скомпилируйте Chromium самостоятельно и исключите код, связанный с DEP. Это можно сделать, например, путем редактирования ApplyProcessMitigationsToCurrentProcess in process_mitigations.cc, чтобы он игнорировал флаги MITIGATION_DEP и MITIGATION_DEP_NO_ATL_THUNK.
  3. Запустите bcdedit, как вы уже нашли. Когда вы это сделаете, вы отключите DEP на уровне ОС, и это приведет к сбою вызовов Chromium до SetProcessDEPPolicy.
Смежные вопросы