天哪,这太奇怪了,我不知道该说些什么。简短的版本是我有一个模拟器应用程序,当用户要求我时,我从应用程序中产生了该应用程序。最近它停止工作,尽管我可以从命令行或开始菜单中运行模拟器罚款。这可能是由于移至VS2010或Windows 7或我没有注意到审查源控制差异的东西所致。

我有第二个模拟器,试图以相同的方式产卵,并且效果很好。

默认情况下,我正在为此目的使用QT3的Qprocess包装器,但是我使用系统,自己的CreateProcess和Shellexecute获得了相同的行为。

cmd.exe“/c应用程序参数”的shellexecute确实为我提供了更多信息。我得到对话框

“该程序无法启动,因为您的计算机缺少MSVCR80.dll。尝试重新安装程序以解决此问题。”

不方便的是,父级应用程序和第二个模拟器都使用msvcr80.dll。

Upon copying MSVC*80.dll from g:windowswinsxsx86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 to the same directory as my executable, the error message changes to

“运行时错误!
程序:g: path to app.exe
R6034
应用程序试图错误地加载C运行时库。
请联系应用程序的支持团队以获取更多信息。

其次是

该应用程序无法正确启动(0xc0000142)。单击确定关闭应用程序。

而且,该应用程序再次从命令行中运行良好,并在适当的位置上运行。


更新:

我怀疑这可能是与环境相关的,因此将我的Shellexecute机制更改为执行CMD /C设置&&应用程序参数。我设置了一个具有相同参数的cmd.exe,我的应用程序现在正在崩溃。当我弄清楚原因时,会更新:)

它是MATLAB的组件运行时工具,它正在将我的过程的路径变量修改为不良效果。它正在准备自己的dir,里面充满了DLL和造成的破坏。

有帮助吗?

解决方案

我正在使用的一个愚蠢的工具在路径上做了一个setEnv,准备了一个目录,以动态加载一些DLL,但后来将我的应用程序弄乱了。我最终使用了getenvironmentsstrings,如上一个示例所示 这里, ,删除路径env var中的第一个条目,并将新的(原始)环境发送到包裹CreateProcessa的Qprocess。

其他提示

您需要安装 CRT

可能 工作 - 如果破裂,您就可以保留两个部分:-)

尝试从此处安装VC ++重新分布 - http://www.microsoft.com/downloads/en/details.aspx?familyid=A5C84275-3B97-4AB7-40D-3802B2AF5FC2&displaylang=en.

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

另一个想法 - 重新安装失败的武器本身。它可能附带自己的VC ++ ReDistributables副本,重新安装可能会有所帮助。特别是尝试使用Windows 7的合理性模式(也许返回Vista或XP兼容性)来重新安装它可能更有效。

要重申 - 您必须尝试,而且我没有真正的想法,上述任何一个想法是否会对您有好处,甚至一定不要造成伤害。也就是说,如果我面临类似的问题,这些是我尝试的步骤。恩!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top