问题产生应用程序

时间:2010-11-03 18:25:28

标签: c++ windows createprocess

天哪,这太奇怪了,我不知道该说些什么。简短的版本是我有一个模拟器应用程序,当用户要求我从我的应用程序产生。它最近停止工作,虽然我可以从命令行或开始菜单运行模拟器。这可能是由于转移到VS2010或Windows 7或者我没有注意到查看源代码控制差异的内容。

我有第二个模拟器,我尝试以相同的方式生成它并且工作正常。

默认情况下,为了这个目的,我在CreateProcess中使用Qt3的QProcess包装器,但是我使用系统,我自己的CreateProcess和ShellExecute获得相同的行为。

cmd.exe“/ c application params”的ShellExecute确实为我提供了更多信息。我得到了对话框

  

“程序无法启动,因为您的计算机缺少MSVCR80.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)。单击“确定”关闭应用程序。

而且,再一次,应用程序在命令行运行正常,并且这些dll就位。


更新

我怀疑它可能与环境有关,所以改变了我的ShellExecute机制来做cmd / c set&& app params。我设置了一个带有相同参数的cmd.exe,我的应用程序现在崩溃了。当我找出原因时会更新:)

这是MATLAB的组件运行时工具,它将我的进程的PATH变量修改为不良影响。它在它自己的dir之前充满了dll并且造成了严重破坏。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您需要安装CRT

答案 2 :(得分:0)

这个可以工作 - 如果它打破了,你可以保留两个部分: - )

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

请记住在安装内容之前备份系统,创建还原点等。

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

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