C программа не запускается на другом компьютере

Обновлено: 04.07.2024

Я создал клиентское серверное приложение на C++ с помощью Visual Studio.

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

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

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

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

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

Справочная информация:

  • приложениям C++ необходимы сборки времени выполнения (DLL) для работы на любом компьютере windows.
  • обычно эти сборки времени выполнения расположены на C:\Windows\Winsxs справочник.
  • все операционные системы windows по умолчанию поставляются с несколькими сборками времени выполнения.
  • но если ваше приложение разработано в более новой версии среды сборки во время выполнения, целевой компьютер также нуждается в той же версии времени выполнения существовать там.
  • при установке visual studio на компьютер поступает большинство новых версий сборок времени выполнения.

Soloution: Наконец, в любом случае целевой компьютер должен иметь точные сборки времени выполнения. Есть несколько способов сделать это (для более подробного поиска в google каждый).

  1. статически связать сборки времени выполнения с вашим приложением (хлопотно для большого приложения).
  2. установить перераспределение C++ среда в целевом компьютере (самый простой способ).
  3. создание проекта установки для развертывания во время выполнения на целевом компьютере при установке приложения. (Неплохо)
  4. развертывание сборок времени выполнения в качестве частных сборок (professional) см. здесь для более подробной информации

условия:

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

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

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

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

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

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

Репутация: 27
Всего: 154

user posted image

Я решил раз и навсегда пролить свет на эту тему. так как уже достали =)
Что делать если программа написаная с использованием visual studio 2005 не запускается на другом компьютере.
Во первых, следует пояснить, что (почти)любая программа на с++ использует стандартную библиотеку - c runtime library, которая содержит набор функций, используемых программой. Например функции для работы с динамической памятью, со строками, с файлами и много чего еще. Эта библиотека может компоноваться либо динасически, либо статически. Так-же существует release и debug версии библиотеки. По умолчанию, когда вы создаете проект в visual studio, он настроен на использование динамической библиотеки. Поэтому, приложение можно будет запустить только на компьютерах, с установленной CRT библиотекой нужной версии.
Самый очевидный способ решения поблемы - уствновить вместе с приложением нужные библиотеки. Для этого существует Microsoft Visual C++ 2005 Redistributable Package (x86/IA64). Этот пакет устанавливает стандартную библиотеку с++ (MSVCR80.dll) а так-же ATL, MFC и OpenMP библиотеки. После этого ваше приложение можно запускать на этой машине.
Чуть менее очевидный способ - статическая компоновка. Заходим в опции проекта, находим там опции компилятора (C/C++ -> Code Generation), и меняем параметр Runtime Library с "Multi Threaded DLL (/MD)" на "Multi Threaded (/MT)". Для отладочной версии программы нужно поменять "Multi Threaded Debug DLL (/MDd)", на "Multi Threaded Debug (/MTd)". После перекомпиляции, несем программу на любую машину и запускаем.

Репутация: 6
Всего: 162

Следует заметить, что Visual Studio - не единственная среда разработки
А так - спасибо за старания.

Репутация: 27
Всего: 154

Репутация: 85
Всего: 196

Есть еще универсальный способ (которым пользуюсь я), который подходит и к другим средам программирования (в т.ч. BCB, Delphi и пр.). Для этого понадобится какая-нибудь программа для просмотра содержимого бинарных файлов. Я использую вьюер входящий в состав Total Commander.
Итак, открываем полученный файл exe с помощью вьюера, и ищем по ".DLL" (без кавычек и учета регистра) или другому расширению (например, ".BPL" для BCB), в зависимости от того, на что ругается программа. Будут находиться всякие библиотеки, в т.ч. и стандартные (kernel32.dll, user32.dll и пр.) и не очень. Последние нужно скопировать в дистрибутив. затем ту же операцию повторить для всех библиотек. и так до тех пор, пока не будут найдены все зависимости.

Репутация: 27
Всего: 154

bsa, действительно так можно делать, а я и не знал

Репутация: нет
Всего: 15


А я depends (Dependency Walker). Не знаю, как в Total Commander, а здесь такого рода ошибки выдаются наглядно.

Репутация: нет
Всего: 52

Модераторы, думаю эту тему стоит закрепить отдельно?

Ни что не внушает сна крепче, чем день приисполненный трудов!

Репутация: 6
Всего: 162

Репутация: нет
Всего: нет

Для 2008 студии только установка Microsoft Visual C++ 2008 Redistributable Package (x86/IA64)?Или есть альтернатива?

Репутация: 27
Всего: 154

Репутация: нет
Всего: нет

Цитата

Заходим в опции проекта, находим там опции компилятора (C/C++ -> Code Generation), и меняем параметр Runtime Library с "Multi Threaded DLL (/MD)" на "Multi Threaded (/MT)".

При компиляции выдаёт:

( * У меня Microsoft Visual Studio 2008)

Репутация: 6
Всего: 118

кроме depends (входящей в состав VS) есть утилита dumpbin
использовать ее примерно так:

покажет импортные библиотеки и функции (хотя не умеет делать глубокого сканирования, как, например, depends)
Что-то не поняли? -> Напейтесь до зеленых человечков. эта сверхцивилизация Вам поможет.

Репутация: 1
Всего: 3

Цитата

Заходим в опции проекта, находим там опции компилятора (C/C++ -> Code Generation), и меняем параметр Runtime Library с "Multi Threaded DLL (/MD)" на "Multi Threaded (/MT)".

При компиляции выдаёт:

Балмер! Я узнал тебя

Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо

Репутация: нет
Всего: нет

Репутация: 85
Всего: 196

skylex, легко - зайти в настройки проекта и удали все run-time packages, а в настройках линкера включи линковку со статическими библиотеками (кажется, static RTL, или что-то в этом духе).
Модератор: для вопросов по билдеру есть свой раздел.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

[ Время генерации скрипта: 0.1439 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Читайте также: