Вопрос

Боже, это так странно, я не знаю, что сказать.Короткая версия заключается в том, что у меня есть приложение-симулятор, которое я запускаю из своего приложения, когда пользователь просит меня об этом.Недавно он перестал работать, хотя я могу нормально запустить симулятор из командной строки или меню "Пуск".Это может быть связано с переходом на VS2010 или Windows 7 или с чем-то, чего я не заметил, просматривая различия в системе управления версиями.

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

По умолчанию я использую оболочку QProcess Qt3 для CreateProcess для этой цели, но я получаю такое же поведение, используя system, мой собственный CreateProcess и ShellExecute.

Однако ShellExecute из a cmd.exe "параметры приложения / c" предоставляет мне некоторую дополнительную информацию.Я получаю диалоговое окно

"Программа не может запуститься, поскольку MSVCR80.dll отсутствует на вашем компьютере.Попробуйте переустановить программу, чтобы устранить эту проблему ".

Неудобно, что и родительское приложение, и второй симулятор используют MSVCR80.dll.

При копировании MSVC *80.dll из g:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 в тот же каталог, что и мой исполняемый файл, сообщение об ошибке меняется на

"Ошибка во время выполнения!
Программа:g:\path o\app.exe
R6034
Приложение предприняло попытку неправильно загрузить библиотеку времени выполнения C.
Пожалуйста, свяжитесь со службой поддержки приложения для получения дополнительной информации.

За которым следует

Приложению не удалось запуститься корректно (0xc0000142).Нажмите кнопку ОК, чтобы закрыть приложение.

И, опять же, приложение отлично запускается из командной строки с этими библиотеками DLL на месте.


Обновить:

Я подозревал, что, возможно, это связано с окружающей средой, поэтому изменил свой механизм ShellExecute, чтобы выполнить cmd / c set && app params.Я настроил a cmd.exe с теми же параметрами, и мое приложение теперь выходит из строя аналогичным образом.Обновлю, когда выясню, почему :)

Это инструмент выполнения компонентов MATLAB, который изменяет переменную PATH моего процесса с плохим эффектом.Он добавляет свой собственный каталог, полный dll-файлов, и сеет хаос.

Это было полезно?

Решение

Глупый инструмент, который я использовал, установил setenv в PATH, добавив каталог, который он хотел для динамической загрузки некоторых библиотек dll, но который позже испортил мое приложение.В итоге я использовал GetEnvironmentStrings, как показано в последнем примере здесь, стирая первую запись в ПУТИ env var и отправляя новую (исходную) среду в QProcess, которая завершает CreateProcessA.

Другие советы

Вам необходимо установить ЭЛТ

Это мочь работайте - если он сломается, вы сможете сохранить обе части :-)

Попробуйте установить распространяемый VC ++ отсюда - http://www.microsoft.com/downloads/en/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en.

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

Еще одна идея - попробуйте переустановить само приложение, вышедшее из строя.Он может поставляться со своей собственной копией распространяемых файлов VC ++, и переустановка может помочь.Особенно.попытка переустановить его с помощью режима совместимости Windows 7 (возможно, вернуться к совместимости с Vista или XP) может оказаться еще более эффективной.

Повторяю - вам придется попробовать, и я понятия не имею, принесет ли вам пользу какая-либо из вышеперечисленных идей или хотя бы не навредит.Тем не менее, если бы я столкнулся с подобной проблемой, я бы попробовал выполнить следующие шаги.ХТХ!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top