Не запускается exe файл visual studio

Обновлено: 03.07.2024

Код работает, но я не понимаю, почему я не могу запустить .exe, созданный из скомпилированного проекта c с использованием gcc (что является моей целью).

Я тоже пытался работать от имени администратора.

Кто-нибудь может мне объяснить?

2 ответа

(Преобразование моего комментария в ответ)

Код работает, но я не понимаю, почему я не могу запустить .exe, созданный из скомпилированного проекта c с использованием gcc (что является моей целью).

Я подозреваю, что проблема в том, что ваш скомпилированный исполняемый файл gcc во время выполнения имеет зависимости от файлов, расположенных в том же каталоге файловой системы, что и ваш скомпилированный gcc исполняемый файл, и ссылается на эти файлы только по их коротким именам (например, " someFile.txt ") вместо их имен файлов с абсолютным путем (например, "C:\my-gcc-program\bin\someFile.txt" ), тогда ОС просматривает рабочий каталог этого процесса (также известный как текущий каталог).

Обратите внимание, что когда ваша программа использует Process.Start(String fileName) , тогда вновь созданный (дочерний) процесс ОС наследует рабочий каталог вашего процесса, а не сбрасывается в родительский каталог имени исполняемого файла нового процесса!

Поэтому, если ваш дочерний процесс ожидает, что "someFile.txt" находится в его рабочем каталоге, вам необходимо запустить дочерний процесс с правильным рабочим каталогом, а не наследовать его от вашего процесса.

Вы можете сделать это двумя разными способами, каждый из которых требует от вас использования ProcessStartInfo вместо любой из перегрузок Process.Start , которые принимают String fileName .

Вариант 1. Установите ProcessStartInfo.WorkingDirectory напрямую:

Параметр UseShellExecute создает новый процесс, как если бы пользователь запустил его через оболочку своей ОС, например cmd.exe или Explorer.exe , а не как дочерний процесс вашего процесса. (Одним из многих) эффектов этой опции является то, что ОС автоматически устанавливает рабочий каталог этого нового процесса за вас.

Обратите внимание, что при использовании UseShellExecute == true вы все равно должны указать действительный путь WorkingDirectory , однако его цели меняются:

  • Свойство WorkingDirectory ведет себя иначе при UseShellExecute is true , чем при UseShellExecute is false .
    • Когда UseShellExecute истинно, свойство WorkingDirectory указывает местоположение исполняемого файла.
      • Если WorkingDirectory - пустая строка, считается, что текущий каталог содержит исполняемый файл.
      • При UseShellExecute is true рабочий каталог приложения, запускающего исполняемый файл, также является рабочим каталогом исполняемого файла.

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

      Я создал клиентское серверное приложение на 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.1936 ] [ Использовано запросов: 21 ] [ GZIP включён ]

      К сожалению, единого метода решения для ошибки «Microsoft Visual C++ Runtime Library» нет, так как причины могут быть разными: отсутствующие или поврежденные компоненты системы, влияние сторонних служб и программ, в некоторых случаях — ошибки в самой запускаемой программе (особенно если она была написана вами лично).

      Язык программ, не поддерживающих Юникод и пути к папкам с программой

      Этот способ решения часто оказывается результативным для пользователей с русскоязычными версиями Windows 10, 8.1 или Windows 7, при условии, что ошибка Microsoft Visual C++ Runtime Library вызывается какой-то сторонней программой, а не системными компонентами, такими как explorer.exe или SystemSettings.exe.

      Изменение языка программ, не поддерживающих Юникод

      1. Если запускаемая игра или программа (или её установщик) находится в папке, путь к которой содержит кириллицу (русские буквы), перенесите её в другое расположение или переименуйте папку, попробуйте запустить. Например, если ваше имя пользователя на русском языке, а файл запускается из папки «Загрузки», то полный путь к ней будет иметь види это может послужить причиной ошибки.
      2. Зайдите в Панель управления (в Windows 10 панель управления можно открыть через поиск на панели задач) — Региональные стандарты, откройте вкладку «Дополнительно» и в разделе «Язык программ, не поддерживающих Юникод» нажмите «Изменить язык системы». Выберите «Английский (США)», примените настройки и перезагрузите компьютер, затем проверьте, решило ли это проблему.

      Обратите внимание, что второй метод может решить проблему, но при этом сделать так, что программа или игра будет запускаться на английском языке — обычно в этом случае достаточно найти соответствующую настройку в самой программе, чтобы вернуть русский язык.

      Здесь присутствует один нюанс: обычно мы не знаем, какие именно из многочисленных наборов распространяемых компонентов Microsoft Visual C++ послужил причиной проблемы, а потому я рекомендую следующих подход их переустановки:

      Если указанные шаги не решили проблему, выполните следующие шаги:

      Драйверы видеокарты и DirectX

      После установки драйверов, DirectX и перезагрузки компьютера, проверьте, была ли решена проблема.

      Дополнительные методы решения проблемы

      • Удалить программы, установленные непосредственно перед появлением ошибки. По отзывам, причиной может быть самое разное стороннее ПО, среди примеров: Intel True Key, программы принтеров HP, антивирусы.
      • Использовать точки восстановления системы при их наличии.
      • Выполнить чистую загрузку (не путать с установкой) Windows. Если при чистой загрузке ошибка исчезает, то причина — какие-то программы в автозагрузке или сторонние службы. Можно включать их группами, пока не выявим, что именно вызывает ошибку. Как именно выполнить чистую загрузку описано в инструкции Чистая загрузка Windows. .
      • Отдельная инструкция для этой же ошибки с кодом R6025 pure virtual function call

      Ещё один вариант, для случая, когда ошибку вызывает какой-то системный процесс — создать нового пользователя Windows (лучше, если будет использовано имя на латинице), зайти в систему под ним и проверить, сохраняется ли ошибка у этого пользователя.

      Видео инструкция

      Надеюсь, проблема была решена. Если это так, буду благодарен комментарию, в котором вы расскажете, что именно оказалось причиной в вашем случае — это может помочь другим пользователям, столкнувшимся с ошибкой.

      А вдруг и это будет интересно:

      28.01.2021 в 22:31

      Есть вопрос к вам по поводу купленного самсунг 980 про и материнки гигабайт аорус мастер z390 так вот нету ни в одной программе ни информации про смарт ни трим ни Ncq ни остального только есть немного инфы в меджикан. у людей на ютюбе эта информация есть

      29.01.2021 в 14:49

      10.07.2021 в 12:06

      В статью можно добавить sxtrace как один из способов.
      У меня прога на работе требует vc++ x86 2005ые, но их оказывается есть несколько версий, и с помощью sxtrace можно точно узнать версию требуемой библиотеки.

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