1.问题描述
承接了一个项目,给甲方交接的时候,在它的电脑中运行出现了这个错误。
应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具
当时没有截图,不过图像的效果是这样的:
因为他们是新装的系统,给他们装的是Win7 32bit的系统,其它什么都没安装,根据网上的说明,估计是两个问题。
- 系统设置问题,设置不正确;
- 如果1的问题解决了,还出现问题。则系统缺少Microsoft Visual C++ 20XX(运行库)文件(XX表示:05、08、10)。
2.网上解决的一般方法
2.1 对于系统配置不正确
- 开始 - 运行(输入services.msc)- 确定或回车,打开:服务(本地);
2. 我们在服务(本地)窗口找到:Windows Modules Installer服务,查看是否被禁用;
3. 如果Windows Modules Installer服务被禁用,我们必须把它更改为启用 - 手动,重启计算机,再安装应用程序。
2.2 对于缺少Microsoft Visual C++ 20XX(运行库)
网上是去百度上搜索对应的库下载安装。
我是直接用驱动精灵里面系统助手的系统组件进行自动修复。
3.问题依然存在
出现这样错误是因为系统缺少某些运行库,用sxstrace工具可以看究竟,用法:
- 管理员运行cmd ,输入:
SxsTrace Trace -logfile:SxsTrace.etl
,启动跟踪; - 执行目标程序,在弹出错误对话框后(不要关闭对话框);
- 回到cmd命令行,按回车键,然后输入执行命令:
SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt
下面是我运行的情况:
C:\Windows\system32SxsTrace Trace -logfile:SxsTrace.etl
已启动跟踪。跟踪将保存到文件 SxsTrace.etl。
按 Enter 停止跟踪…C:\Windows\system32>SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt
正在分析日志文件 SxsTrace.etl…
分析完毕! 将输出保存到文件 SxsTrace.txt。C:\Windows\system32>
打开SxsTrace.txt
,下面是其内容:
=================
开始生成激活上下文。
输入参数:
Flags = 0
ProcessorArchitecture = x86
CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en
ManifestPath = D:\nwpu\simulation_mapSendUDP\Test_SendPackUDP.exe
AssemblyDirectory = D:\nwpu\simulation_mapSendUDP\
Application Config File =
-----------------
信息: 正在解析清单文件 D:\nwpu\simulation_mapSendUDP\Test_SendPackUDP.exe。
信息: 指令清单定义标识是 (null)。
信息: 参考: Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
信息: 正在解析参考 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。
信息: 正在解析 ProcessorArchitecture x86 的参考。
信息: 正在解析区域性 Neutral 的参考。
信息: 正在应用绑定策略。
信息: 未找到发布服务器策略。
信息: 未找到绑定策略重定向。
信息: 开始程序集探测。
信息: 未找到 WinSxS 中的程序集。
信息: 尝试在 C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
信息: 尝试在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
信息: 尝试在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT.MANIFEST 上探测指令清单。
信息: 尝试在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
信息: 尝试在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST 上探测指令清单。
信息: 未找到区域性 Neutral 的指令清单。
信息: 结束程序集探测。
错误: 无法解析参考 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。
错误: 生成激活上下文失败。
结束生成激活上下文。
从中得到一些信息:
“错误: 无法解析参考 Microsoft.VC90.DebugCRT,processorArchitecture=”x86”,publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32”,version=”9.0.21022.8”。
错误: 生成激活上下文失败。”
可以知道出错的exe是用VC90编译器编译的(我其中一个类库使用VS2008编译的),VC90是visual studio 2008 中的C++开发工具。 安装visual studio 2008 中的C++开发工具后,就可以运行了。
简单的解决办法:
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\amd64\Microsoft.VC90.CRT
将其中的所有文件(Microsoft.VC90.CRT.manifest,msvcm90.dll,msvcp90.dll,msvcr90.dll)拷贝到你的exe文件同级别的位置即可,或根据编译所用的vc版本来找到相应的文件
但是,还是不行,于是我,给目标环境装了VS2008,问题完美解决。什么鬼!什么鬼!什么鬼!,就这样吧,许多问题对我来说,依然是玄学问题。
我提出了一个设想,如果这个程序调用的那个类库LIB(就是我用VS2008编写的),如果用静态编译,是不是不会出现这个问题,当然我也不可能为了测试这个软件把现在电脑里的VS2008卸载了,以后有机会在测测吧。