【发布时间】:2010-11-03 18:25:27
【问题描述】:
天哪,这太奇怪了,我不知道该说什么。简短的版本是我有一个模拟器应用程序,当用户要求我时,我会从我的应用程序中生成它。它最近停止工作,尽管我可以从命令行或开始菜单运行模拟器。这可能是由于迁移到 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 并造成严重破坏。
【问题讨论】:
-
您是否将所有应用程序都移至 VS 2010?
-
是的,所有应用程序都是使用 VS2010 构建的,并且所有 C++ dll 都链接到我的应用程序。 MSVCR80.dll 来自 Postgres 的 libpq.dll。
-
检查文件中的清单(可以通过使用文本查看器或 procexp 或字符串等工具打开可执行文件来完成)。同一个库有多个版本——你有麻烦了;您必须重建所有内容(包括依赖项)以确保只使用一个版本的库。
-
安德烈,我看到的只是
标签: c++ windows createprocess