Я написал консольное приложение C ++ в Visual Studio 2019 и пытаюсь развернуть его на другом windows ноутбуке. На обоих ноутбуках установлена 64-разрядная Windows 10 версия, а на моем целевом ноутбуке установлена / обновлена *. 1038 * Framework, vc_redist.x64.exe и DirectX.
In С точки зрения метода развертывания, я дословно следовал этому пошаговому руководству Microsoft , добавив шаг к тому, чтобы мой недавно созданный проект "setup" также был нацелен на платформу x64, поскольку некоторые внешние библиотеки в моем коде требовали x64. Результирующая пара «setup» .exe / .msi работает, как и планировалось, на исходном ноутбуке - устанавливается и запускается без излишеств.
Установка на целевом ноутбуке проходит нормально, но при запуске программы выдается ошибка, упомянутая в Название этого поста. После нескольких часов попыток выяснить это, я думаю, у меня есть идея, откуда возникла проблема, но сначала я поделюсь тем, что я пробовал , что в основном является каждой рекомендацией, найденной Поиск в коде этой ошибки:
- чистая загрузка
- SF C сканирование
- chkdsk c: / f / r
- repairing / fre sh установка всех платформ, упомянутых в первом абзаце
- , с запуском как установщика приложения, так и установленного приложения в качестве администратора
- перезапуск ноутбука и переустановка приложения после всех этих изменений
Как мне кажется, root проблемы:
В проекте установки / развертывания в VS три «обнаруженных зависимости» (MSVCP140D.dll) , ucrtbased.dll, VCRUNTIME140D.dll) имеют пути к файлам через… \ System32 \, а не идентичные зависимости, которые можно найти в… \ SysWOW64. Две другие обнаруженные зависимости - это внешние 64-битные библиотеки DLL (именно поэтому я указал весь свой проект на x64). Когда я запускаю свое приложение через Dependency Walker, оно соглашается с тем, что три ранее упомянутые зависимости являются «неправильным типом процессора», тогда как две последние подходят. Этот сценарий, однако, не объясняет мне, почему установка / запуск (вне VS) отлично работает на ноутбуке-источнике (, не должен ли он работать, если VS упаковывает смесь из 32 и 64-битных зависимостей? ). Фактически, запуск приложения через Dependency Walker на исходном ноутбуке показывает то же самое, что и на целевом ноутбуке - те же 3 зависимости являются «неправильным типом процессора», но приложение работает здесь.
Я не см. опцию в VS, чтобы изменить проект «setup» для чтения 64-битного пути к файлу. Я пытался вручную поменять местами 64-разрядные библиотеки DLL на разных этапах (включая перезагрузку компьютера между обменом DLL и запуском приложения), что, похоже, не дало никакого эффекта. На самом деле я попытался заменить 3 соответствующие библиотеки DLL в папке System32 на библиотеки DLL из папки SysWOW64 (моя идея дешевого обходного пути для невозможности изменить путь к файлу - просто изменить файл), и это просто заставило меня получить та же ошибка на моем исходном ноутбуке, что и на целевом ноутбуке.
Все эти вещи относительно новы для меня, поэтому, пожалуйста, дайте мне знать, если я по глупости упускаю некоторые фундаментальные детали из своего процесса / проект - на данный момент было бы хорошо, если бы это было так, и это легко исправить.