Я поддерживаю приложение, которое изначально было построено в Visual Studio 2005, Framework 2.0, с использованием 32-разрядной машины для разработки под Windows XP.
Моя новая машина для разработки - 64-разрядная версия Windows 7.
Я загрузил свое решение в Visual Studio 2010 и успешно преобразовал все проекты (есть несколько, которые использует настоящее приложение) и обновил до Framework 4.0.
В режиме отладки приложение работает без проблем.
Теперь, как это работает, когда-либо был только один развернутый установщик.Изменения развернуты на сервере.Когда приложение запускается после установки, оно фактически запускает приложение обновления для проверки изменений файлов по сравнению с сервером, и если они обнаруживаются, они затем загружаются, заменяя исходные файлы на клиенте, а затем «настоящее» приложениеrun.
После развертывания моей первой версии, скомпилированной на моем 64-битном компьютере, на сервер я запустил установленную версию приложения, чтобы проверить, работает ли она нормально.Казалось, что апдейтер работает нормально, но при запуске «настоящего» приложения происходит сбой.
При запуске в Windows 7 происходит сбой:
Неправильное имя приложения: ProviderDesktop.exe, версия: 2.6.0.0, отметка времени: 0x4f4fad5e Неправильное имя модуля: KERNELBASE.dll, версия: 6.1.7600.16850, отметка времени: 0x4e211485 Код исключения: 0xe0434352 Смещение ошибки: 0x0000b9bc Идентификатор сбойного процесса: 0x2388 Время запуска сбойного приложения: 0x01ccf8971407b4fe Неправильный путь приложения: C: \ Program Files (x86) \ UHINt2.5 \ путь к файлу UHINt2.5 \ ProviderDeskC: \ Windows \ syswow64 \ KERNELBASE.dll Идентификатор отчета: 53717437-648a-11e1-a455-8a2e36aa00e8
При запуске на XP происходит сбой:
EventType: clr20r3 P1: providerdesktop.exeP2: 2.6.1.1
P3: 4f4fad5e P4: providerdesktop P5: 2.6.1.1 P6: 4f4fad5e
P7: 85d P8: 0 P9: system.io.fileloadexception
Я выполнил 2 диагнозадо сих пор после поиска в Google проблемы.
Сначала я попробовал Fusion logging.Ничего не было найдено.
Во-вторых, я попробовал DependencyWalker, загружая неисправное приложение на машину для разработки Windows 7.Он показал пропавшую IESHIMS.DLL.Ссылаясь на этот пост, я обнаружил IESHIMS.DLL, но заметил в DependencyWalker, что он действительно ожидал, что DLL будет находиться в корневой папке приложения.Я поместил его туда, перезапустил DependencyWalker, и эта ошибка исчезла.Однако есть и другая ошибка, которая, я сильно подозреваю, является основной причиной проблемы: Ошибка: были обнаружены модули с разными типами ЦП.
Все модули, перечисленные в DependencyWalker, - это x64, кроме ieshims.dll и моего фактического.exe, которые являются x86.Приложения Updater и Real предназначены для платформы x86.
Некоторые коллеги ранее предлагали, что у меня могут возникнуть проблемы из-за ссылок сторонних разработчиков в приложении Real.Из того, что я вижу здесь, это, похоже, не так.
Если бы кто-то мог помочь мне разобраться с этим, я определенно был бы признателен, поскольку на самом деле я не очень разбираюсь вПонятия более низкого уровня, такие как x86 / x64.Это означало бы разницу между разработкой на хорошей быстрой машине в 2010 / .NET 4.0 и необходимостью поддерживать виртуальную машину под XP / 32 только для этого приложения, имеющего серьезные проблемы с производительностью, и разработкой в 2005 / .NET 2.0.
Моя цель заключается в том, чтобы иметь возможность разрабатывать приложение на Win7x64, 2010, 4.0 и без проблем обновлять клиентские версии приложения для обновления.
Заранее большое спасибо.