【问题标题】:Problem spawning application问题生成应用程序
【发布时间】: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


【解决方案1】:

我正在使用的一个愚蠢的工具在 PATH 上做了一个 setenv,在它想要动态加载一些 dll 的目录之前添加了一个目录,但后来搞砸了我的应用程序。我最终使用了 GetEnvironmentStrings,如上一个示例 here 所示,删除了 PATH env var 中的第一个条目,并将新的(原始)环境发送到包装 CreateProcessA 的 QProcess。

【讨论】:

    【解决方案2】:

    你需要安装CRT

    【讨论】:

    • 正如我所说,它在我的应用程序之外运行良好。安装这个没有帮助
    【解决方案3】:

    可能有效 - 如果它坏了,你可以保留两部分:-)

    尝试从这里安装 VC++ 可再发行组件 - http://www.microsoft.com/downloads/en/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en

    记得在安装之前备份您的系统、创建还原点等。

    另一个想法 - 尝试重新安装失败的应用程序本身。它可能带有自己的 VC++ 可再发行组件副本,重新安装可能会有所帮助。特别是。尝试使用 Windows 7 的兼容模式(可能回到 Vista 或 XP 兼容性)重新安装它可能会更有效。

    重申一下 - 你必须尝试一下,我不知道上述任何一个想法是否会对你有好处,甚至肯定不会伤害你。也就是说,如果我遇到类似的问题,这些是我会尝试的步骤。 !

    【讨论】:

    • 安装这个没有帮助。谢谢你的建议。模拟器也是我的软件。不涉及安装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多