哎呀,这太奇怪了,我不知道该说什么。简单来说,我有一个模拟器应用程序,当用户要求时从我的应用程序中生成。最近它停止工作了,虽然我可以从命令行或开始菜单中运行模拟器。这可能是由于迁移到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的目录,造成混乱。
我有第二个模拟器,我尝试以同样的方式生成它,它可以正常工作。
默认情况下,我使用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的目录,造成混乱。