问题:应用程序无法启动

4
哎呀,这太奇怪了,我不知道该说什么。简单来说,我有一个模拟器应用程序,当用户要求时从我的应用程序中生成。最近它停止工作了,虽然我可以从命令行或开始菜单中运行模拟器。这可能是由于迁移到VS2010或Windows 7,或者是我没有注意到的源代码控制差异所致。
我有第二个模拟器,我尝试以同样的方式生成它,它可以正常工作。
默认情况下,我使用Qt3的QProcess包装器来创建此目的的CreateProcess,但是我使用system、自己的CreateProcess和ShellExecute时会得到相同的行为。
执行cmd.exe "/c application params"的ShellExecute确实为我提供了更多信息。我得到对话框
"The program can't start because MSVCR80.dll is missing from your computer. Try reinstalling the program to fix this problem."
不方便的是,父应用程序和第二个模拟器都使用MSVCR80.dll。
将MSVC*80.dll从g:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5复制到与我的可执行文件相同的目录中后,错误消息变为
"Runtime Error! Program: g:\path\to\app.exe R6034 An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information."
然后是
"The application was unable to start correctly (0xc0000142). Click OK to close the application."
而且,一旦这些dll放在那里,应用程序就可以从命令行中正常运行。
更新:
我怀疑可能与环境有关,因此将我的ShellExecute机制更改为cmd /c set && app params。我设置了一个带有相同参数的cmd.exe,我的应用程序现在也会类似地崩溃。找到原因后会进行更新 :)
是MATLAB的组件运行时工具正在修改我的进程的PATH变量,产生了不良影响。它正在前置其自己的充满dll的目录,造成混乱。

你把所有的应用程序都迁移到VS 2010了吗? - heavyd
是的,所有应用程序都是使用VS2010构建的,并且所有C++ dll链接到我的应用程序。MSVCR80.dll来自于libpq.dll,Postgres的库。 - Thomas
检查你的文件中的清单(可以通过使用文本查看器或诸如procexp或strings之类的工具来完成)。如果有几个相同库的版本,则会出现问题;您需要重新构建所有内容(包括依赖项),以确保只使用一个库的版本。 - Andrey
Andrey,我看到的只有<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel> </requestedPrivileges> </security> </trustInfo> </assembly>。 - Thomas
3个回答

1
我曾使用一个愚蠢的工具,在PATH上执行了setenv操作,将一些dll动态加载所需的目录前置,但后来却搞乱了我的应用程序。最终,我使用了GetEnvironmentStrings,如此处所示,删除了PATH环境变量中的第一个条目,并将新的(原始的)环境发送给QProcess,它包装了CreateProcessA。

0

你需要安装CRT


就像我说的那样,它在我的应用程序之外运行良好。安装这个并没有帮助。 - Thomas

0

这个可能有效 - 如果它出了问题,你就可以留下两个碎片 :-)

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

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

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

重申一遍 - 你必须尝试,我真的不知道上述任何一个想法是否对你有好处,甚至不能确定它们是否肯定不会造成伤害。话虽如此,如果我面临类似的问题,这些是我会尝试的步骤。希望对你有所帮助!


安装这个并没有帮助。谢谢你的建议。模拟器也是我的软件,不需要安装。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接