天哪,这太奇怪了,我不知道该说什么。 简短的版本是我有一个模拟器的应用程序,我从我的应用程序产生时,用户要求我。 它最近停止了工作,虽然我可以在命令行或开始菜单中运行模拟器。 这可能是由于转移到VS2010或Windows 7或我没有注意到审查源代码控制差异。
我有第二个模拟器,我尝试以同样的方式产卵,它工作正常。
默认情况下,我为此使用了CreateProcess的Qt3 QProcess包装,但是我使用系统,我自己的CreateProcess和ShellExecute获得了相同的行为。
cmd.exe“/ c应用程序params”的ShellExecute确实为我提供了一些更多的信息。 我得到了对话
“程序无法启动,因为您的计算机缺lessMSVCR80.dll。尝试重新安装程序来解决此问题。
不方便的是,父应用程序和第二个模拟器都使用MSVCR80.dll。
将g:\ windows \ winsxs \ x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5中的MSVC * 80.dll复制到与我的可执行文件相同的目录中时,错误消息将更改为
“运行时错误!
程序:g:\ path \ to \ app.exe
R6034
一个应用程序已经尝试错误地加载C运行时库。
请联系应用程序的支持团队获取更多信息。
其次是
应用程序无法正确启动(0xc0000142)。 单击确定closures该应用程序。
而且,再次,应用程序运行良好,从命令行与这些DLL的地方。
更新:
我怀疑也许是环境相关的,所以改变了我的ShellExecute机制来做cmd / c set && app params。 我用相同的参数设置了一个cmd.exe,现在我的应用程序崩溃了。 将更新,当我弄清楚为什么:)
这是MATLAB的组件运行时间工具,它正在修改我的进程的PATHvariables,效果不好。 它预装了自己的dir,并且造成了严重的破坏。
我用的一个愚蠢的工具在PATH上做了一个setenv,预先设定了一个目录,用于动态加载一些dll,但后来又搞乱了我的应用程序。 我最终使用了GetEnvironmentStrings,如上例所示,擦除PATH env var中的第一个条目,并将新的(原始)环境发送给包装CreateProcessA的QProcess。
你需要安装CRT
这可能工作 – 如果它打破,你得到保持两件:-)
尝试从这里安装VC ++ redistributable – http://www.microsoft.com/downloads/en/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en 。
请记住备份您的系统,创建一个还原点等安装东西之前。
另一个想法 – 重新安装失败的应用程序本身。 它可能带有自己的VC ++可再发行版本,重新安装可能会有所帮助。 ESP。 试图使用Windows 7的compability模式重新安装它(也许回到Vista或XP的兼容性)可能会更有效。
重申 – 你必须尝试,而且我不知道上述两个想法中的哪一个对你有好处,或者确保没有伤害。 也就是说,如果我遇到了类似的问题,这些就是我要尝试的步骤。 HTH!