[Setting]win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确

win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确

1.问题描述

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

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

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

pic1

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

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

2.网上解决的一般方法

2.1 对于系统配置不正确

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

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

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

这里写图片描述

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

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

这里写图片描述

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卸载了,以后有机会在测测吧。


donate

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在系统设置中检测基于堆栈的缓冲区溢出可以通过以下步骤实现: 1. 使用堆栈保护机制:在编译和链接应用程序时,可以启用堆栈保护机制,例如使用编译器选项 `-fstack-protector`。这将在堆栈上放置一个特殊的值,以便在函数返回时进行检查,以确保堆栈的完整性。 2. 使用堆栈随机化:堆栈随机化是一种安全措施,通过在每次运行时随机化堆栈的布局,使攻击者难以预测缓冲区的位置。可以通过操作系统的安全功能或使用工具如地址空间布局随机化(ASLR)来实现。 3. 使用堆栈溢出检测工具:可以使用专门的工具来检测和防止堆栈溢出漏洞,例如使用静态分析工具或动态检测工具。这些工具可以帮助发现潜在的缓冲区溢出漏洞,并提供修复建议。 4. 限制堆栈大小:通过限制堆栈的大小,可以减少堆栈溢出的潜在影响。可以通过操作系统或编译器选项来设置堆栈大小。 5. 使用安全编程实践:编写安全的代码是防止堆栈溢出的关键。使用安全编程实践,如正确使用缓冲区操作函数(如`strcpy`和`strcat`),避免使用不受信任的输入直接复制到缓冲区中,以及进行输入验证和边界检查。 这些是一些常见的方法来在系统设置中检测基于堆栈的缓冲区溢出。然而,需要注意的是,没有一种方法可以完全消除堆栈溢出漏洞,因此综合使用多种方法是最佳实践。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值