c++ x64 проблемы с запуском исполняемого файла, созданного с помощью Visual Studio, на другом компьютере




microsoft visual c++ 2017 x64 (4)

Я создал клиент-серверное приложение на C ++, используя Visual Studio.

Теперь я хочу запустить исполняемый файл клиента на другом компьютере (на котором не установлена ​​Visual Studio), но при попытке запустить исполняемый файл выдает следующее сообщение об ошибке:

Это приложение не удалось запустить из-за неправильной конфигурации приложения. Переустановка приложения может решить проблему.

Как я могу запустить exe-файл, не устанавливая ничего на компьютер?


Приложения, созданные с помощью Visual Studio, зависят от Visual C ++ Redistibutable (VCRedist). Когда программа подключается динамически, вашим двоичным MSVCR**.dll потребуется MSVCR**.dll (библиотека времени выполнения Microsoft C).

На MSDN есть хорошая статья под названием « Перераспределение файлов Visual C ++» (для Visual Studio 2008) , в которой говорится, что возможны ошибки времени выполнения в случае, если необходимая библиотека Visual C ++ не установлена:

Вы можете получить одно из следующих сообщений об ошибках в зависимости от версии Windows, в которой вы пытаетесь запустить приложение:

  • Приложение не удалось правильно инициализировать (0xc0000135).
  • Это приложение не удалось запустить из-за неправильной конфигурации приложения. Переустановка приложения может решить эту проблему.
  • Система не может выполнить указанную программу.
В основном у вас есть два варианта:
  • Самое простое возможное решение - изменить динамическое связывание библиотек времени выполнения на статическое связывание. Зайдите в свойства проекта и в C / C ++> Генерация кода вы найдете опцию Runtime Library . Вам нужно изменить его с Multi-threaded DLL (/MD) на Multi-threaded (/MT) .
  • Другое возможное решение - убедиться, что на целевом компьютере установлена ​​правильная версия распространяемого пакета Microsoft VC ++.

Но ваше приложение может зависеть и от других DLL. Если вы хотите узнать, каковы зависимости вашей программы, есть отличная утилита под названием Dependency Walker , которая поможет вам в этой и многих других ситуациях :)


Похоже, вам не хватает некоторых файлов DLL. Обязательно скопируйте соответствующие dll вместе с exe.


Я развернул мою программу в выпуске вместо отладки, и теперь исполняемый файл работает на другом компьютере


Я не видел этой конкретной ошибки раньше, обычно это ошибка вокруг отсутствующей DLL (Windows распространяемая). Предполагая, что на самом деле нет проблем с конфигурацией, у вас есть два варианта:

1) Измените режим компиляции с многопоточной DLL на многопоточную. Это можно сделать из раздела C ++ свойств проекта при генерации кода. В многопоточном режиме ваш двоичный файл будет статически связан с распространяемым Windows. Это, вероятно, то, что вы хотите.

2) Установите распространяемые окна на целевой машине. Это, вероятно, не в порядке, потому что вы заявляете, что не хотите ничего устанавливать на целевой машине.

Предупреждение об варианте 1, разные версии окон имеют разные версии распространяемого. Можно столкнуться с узкоспециализированной средой, в которой статически связанная программа будет работать не так, как ожидается.







exe