Я загружаю Верификатор Приложения 4.0 для тестирования моего Приложения на проверку, если мог иметь проблемы на Vista/7.
Я работаю от отладчика Delphi 2010 и останавливаюсь в представлении CPU. Очевидно, я ничего не понимаю об ассемблере!.
Так, я пытаюсь работать непосредственно от Windows Explorer, и Приложение умирает.
(На самом деле я не понимаю хорошо, что точно сделает Верификатор Приложения: Я ожидаю некоторое дружественное сообщение).
Это - то, что я получаю:
7C81A3E2 C3 ret
7C81A3E3 90 nop
7C81A3E4 8BFF mov edi,edi
ntdll.DbgUserBreakPoint:
7C81A3E6 CC int 3
7C81A3E7 C3 ret
7C81A3E8 8BFF mov edi,edi
7C81A3EA 8B442404 mov eax,[esp+$04]
7C81A3EE CC int 3
7C81A3EF C20400 ret $0004
ntdll.NtCurrentTeb:
7C81A3F2 64A118000000 mov eax, fs:[$00000018]
7C81A3F8 C3 ret
ntdll.RtlInitString:
7C81A3F9 57 push edi
Загрузка:
:7c81a3e2 ntdll.DbgBreakPoint + 0x1
:10003b68 ; C:\WINDOWS\system32\vrfcore.dll
:00396a9d ; C:\WINDOWS\system32\vfbasics.dll
:00397316 ; C:\WINDOWS\system32\vfbasics.dll
:7c84bcdb ; ntdll.dll
:7c8316f8 ; ntdll.dll
:7c83154f ; ntdll.dll
:7c82855e ntdll.KiUserExceptionDispatcher + 0xe
:0040aa00 GetUILanguages + $80
:0040b298 GetResourceModuleName + $124
:0040afde LoadResourceModule + $7A
:0040a134 DelayLoadResourceModule + $2C
:00406c40 @StartExe + $44
:77e6f23b ; C:\WINDOWS\system32\KERNEL32.dll
На днях я пробовал различные комбинации средства проверки приложений.
32-разрядная версия просто зависала. Затем, прочитав немного документации, я обнаружил, что в любом случае нет смысла запускать 32-битную версию, потому что Microsoft интересуются только результатами 64-битного теста. 32-разрядная версия предназначена только для справки (и не работает!).
Я сбросил свою 32-битную виртуальную машину Win7 и создал 64-битную виртуальную машину Win 7, установил 64-битный верификатор приложений, прочитал README (необычный шаг для нас, программистов, я согласен :-)) , затем распечатайте README, потому что это сбивает с толку! После этого вы следуете инструкциям и устанавливаете / запускаете 32-битное приложение в 64-битной ОС. Работает нормально
... а затем вы исправляете все предупреждения из отчета средства проверки приложения.
Application Verifier - это оболочка графического интерфейса пользователя для набора параметров реестра.
Когда вы добавляете свое приложение в Application Verifier, он сообщает Windows, что нужно больше проверять, когда ваше приложение запущено.
После добавления приложения вы можете закрыть Application Verifier; настройки сохранены.
Теперь при каждом запуске приложения Windows будет выполнять дополнительную проверку различных условий (как указано в Application Verifier).
Некоторые проверки приводят к вызову DebugBreak (). (Вот почему ваше приложение умирает, когда вы запускаете его в проводнике Windows.)
Вы должны запускать ваше приложение в отладчике, чтобы вы могли видеть, где возникают проблемы.
Я очень мало знаю о Delphi 2010; если он создает управляемый код, у вас могут возникнуть проблемы, поскольку точки останова будут возникать в машинном коде, и ваш отладчик (отладчик Delphi) должен иметь возможность отлаживать смешанный собственный / управляемый код.
У меня нет опыта работы с AppVerifier, но KiUserExceptionDispatcher вызывает обработчик исключений. В вашем приложении было исключение - стек вызовов указывает на это. Вероятно, поэтому ОС останавливает вас на отладчике.
Я думаю, что вы должны проанализировать, почему здесь произошло исключение, и избавиться от него.
AppVerified создает файлы журналов, которые можно просматривать из самого AppVerifier. Если ваше приложение дает сбой, попробуйте отключить некоторые проверки AppVerifier, чтобы найти виновника.