Проблема нереста приложения - PullRequest
4 голосов
/ 03 ноября 2010

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

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

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

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

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

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

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

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

Затем следует

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

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


Обновление:

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

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

Ответы [ 3 ]

1 голос
/ 04 ноября 2010

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

0 голосов
/ 03 ноября 2010

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

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

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

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

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

0 голосов
/ 03 ноября 2010

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

...