1.问题描述

承接了一个项目,给甲方交接的时候,在它的电脑中运行出现了这个错误。

应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具

当时没有截图,不过图像的效果是这样的:

win7 无法运行frpc_应用程序

因为他们是新装的系统,给他们装的是Win7 32bit的系统,其它什么都没安装,根据网上的说明,估计是两个问题。

  1. 系统设置问题,设置不正确;
  2. 如果1的问题解决了,还出现问题。则系统缺少Microsoft Visual C++ 20XX(运行库)文件(XX表示:05、08、10)。

2.网上解决的一般方法

2.1 对于系统配置不正确

  1. 开始 - 运行(输入services.msc)- 确定或回车,打开:服务(本地);

win7 无法运行frpc_Windows_02

 

2. 我们在服务(本地)窗口找到:Windows Modules Installer服务,查看是否被禁用;

win7 无法运行frpc_应用程序_03

 

3. 如果Windows Modules Installer服务被禁用,我们必须把它更改为启用 - 手动,重启计算机,再安装应用程序。

win7 无法运行frpc_程序集_04

2.2 对于缺少Microsoft Visual C++ 20XX(运行库)

网上是去百度上搜索对应的库下载安装。 
我是直接用驱动精灵里面系统助手系统组件进行自动修复。

win7 无法运行frpc_Windows_05

3.问题依然存在

出现这样错误是因为系统缺少某些运行库,用sxstrace工具可以看究竟,用法:

  1. 管理员运行cmd ,输入:SxsTrace Trace -logfile:SxsTrace.etl,启动跟踪;
  2. 执行目标程序,在弹出错误对话框后(不要关闭对话框);
  3. 回到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卸载了,以后有机会在测测吧。