Я наблюдаю некоторые странные проблемы в системе x64, в которой работает наше приложение .NET.
Наше приложение использует WatiN для выполнения автоматических действий в веб-приложениях на основе браузера.
В упомянутом x64 (Windows 7 Enterprise), WatiN не может найти открытые браузеры.
Внутренне, я считаю, WatiN запрограммирован перечислять все открытые окна с помощью Win32 API и проверять, соответствуют ли какие-либо заданные критерии.
Мой вопрос: если мой процесс загружен как x86 (я вижу * 32 рядом с in в taskmgr), вызывая некоторый метод, помеченный DllImport (...) Может потенциально загрузить версию x64?(EnumWindows определяется в User32.dll, например), какая версия загружается тогда?Один в C: \ Windows \ System32 или один в C: \ Windows \ SysWOW64
Наше приложение скомпилировано в конфигурации x86, однако некоторые из упомянутыхсборки компилируются в «Любой ЦП».
Может ли это вызвать какие-либо проблемы с правильной загрузкой правильных версий (x86 / x64) ссылок DLL / сборок?
РЕДАКТИРОВАТЬ: Добавлен дамп памяти загруженныхmodules: http://www.pasteall.org/27134/text
Обратите внимание, что некоторые модули фактически загружаются из Windows \ SysWOW64, а другие, например, SHDocVW.dll, из C: \ Windows \ System32
. Может ли это указывать на возможное столкновение?между 32/64 в этой системе?
Я отлаживал код WatiN до того момента, когда вызов некоторого нативного метода для перечисления окон возвращает ноль (хотя некоторые окна IE были доступны).
Как я могу далее отладить эту странную проблему?
В рамках диагностического тестирования на неисправном компьютере (это происходит не на всех компьютерах), я сделал простое диагностическое приложение, которое ссылается науказывает библиотеку, которая вызывает EnumWindows.
Примерно так:
DebugApp -> DebugLib
Каждый из них был скомпилирован в x86 и Any CPU, и 4 разные комбинации былипроверено.
- Я запустил это на своем рабочем столе (32 бита), что вызвало 4 одинаковых вывода.
- На Windows Server 2008 R2 (64 бита) было создано 3 одинаковых вывода,и 1 запуск завершился сбоем (как и ожидалось - 64-битный EXE с 32-битным Lib).
- На сбойном компьютере было создано 4 идентичных файла, как у меня, как это может быть?это должно было привести к сбою приложения !!
Есть идеи после этой диагностики?