天哪,这太奇怪了,我不知道该说什么。简短的版本是我有一个模拟器应用程序,当用户要求我时,我会从我的应用程序中生成它。它最近停止工作,尽管我可以从命令行或开始菜单运行模拟器。这可能是由于迁移到 VS2010 或 Windows 7 或我没有注意到查看源代码控制差异的原因。
我有第二个模拟器,我尝试以相同的方式生成它,它工作正常。
默认情况下,我在 CreateProcess 周围使用 Qt3 的 QProcess 包装器,但我使用系统、我自己的 CreateProcess 和 ShellExecute 得到了相同的行为。
但是,cmd.exe "/c application params" 的 ShellExecute 确实为我提供了更多信息。我得到对话框
“程序无法启动,因为您的计算机中缺少 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 set && app params。我用这些相同的参数设置了一个 cmd.exe,我的应用程序现在也同样崩溃了。当我弄清楚原因时会更新:)
这是 MATLAB 的组件运行时工具,它正在修改我的进程的 PATH 变量以产生不良影响。它在自己的目录中添加了 dll 并造成严重破坏。