由于应用程序配置不正确,应用程序未能启动

安装一个软件CA行助手,安装完打开出现C:programfile/行助手/caassistant/由于应用程序配置不正确,应用程序未能启动,重新安装应用程序可能纠正这个问... 安装一个软件CA行助手,安装完打开出现C:program file /行助手/caassistant/由于应用程序配置不正确,应用程序未能启动,重新安装应用程序可能纠正这个问题。我已在电脑上打过vcredist_x86.exe补丁,可还是不行,将软件放到另一台电脑上安装,能正常安装使用。请求大家的帮忙(重要一点,在出问题饿机器上安装时,软件安装的很快) 展开
 我来答
huanglenzhi
2015-11-08 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517194
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

  首先总结一下“由于应用程序配置不正确,应用程序未能启动”这类问题出现的原因:

  在Windows XP SP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是.NET提出来的,但是Windows后来将这个概念集成到操作系统层面上来了。大家都应该知道Dll Hell的问题,为了解决Dll Hell问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。举个例子:

  1、假定编写了一个C++程序A,是使用MFC 8.0(这个版本是随着Visual Studio 2005)发布的。

  2、之后机器升级了Visual Studio的版本,从2005升级到2008,2008的MFC库是9.0版本的,这个时候操作系统里面安装了两个版本的MFC,分别是8.0和9.0。

  3、用Visual Studio 2008编写了另外一个C++程序B,B依赖与MFC 9.0。

  4、如果运行程序A的话,操作系统会将MFC 8.0加载到A的进程里面。

  5、如果这时同时运行程序B,操作系统会将MFC 9.0加载到B的进程里面。这就是Side-by-side的执行概念。

  操作系统之所以能够这样做,是因为它在加载程序A和B之前,除了查看PE格式里面A和B所依赖的Dll信息,都会查看A和B的manifest文件。Manifest文件保存了Windows可执行文件(包括exe和dll文件)要运行起来的环境设置信息,文件名一般是可执行文件的文件全名加上.manifest。例如notepad.exe的manifest文件就应该是notepad.exe.manifest。另外有的程序将manifest文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候看不到程序的manifest文件的原因。通常来说,一个manifest文件的内容大致如下:


  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>

  <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">

  <security>

  <requestedPrivileges>

  <requestedExecutionLevel level='asInvoker' uiAccess='false' />

  </requestedPrivileges>

  </security>

  </trustInfo>

  <dependency>

  <dependentAssembly>

  <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8'

  processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />

  </dependentAssembly>

  </dependency>

  </assembly>

  

  上面的例子里面,就说明这个程序依赖于CRT 9.0,而且是调试版的,CPU架构是32位的CPU。对于将manifest文件嵌入到资源文件的程序也有办法看到manifest的信息。

  1、一种是使用mt.exe(Visual Studio自带的manifest处理程序):

  mt -inputresource:test.exe;#1 /out:test.manifest

  2、另外一种是使用dumpbin程序将整个exe的内容打印到一个文件,然后用文本编辑器打开,搜索Assem字符串样式就能找到manifest信息:

  


  知道了程序依赖于具体哪一个dll以后,可以将所依赖的dll拷贝到程序的安装文件夹里面,以CRT库绑定失败为例,介绍解决步骤:

  1、从上例中知道程序依赖的Microsoft.VC90.DebugCRT库,版本号是9.0.21022.8,需要32位机器版本的CRT。这个依赖项一般是因为程序是调试版,所以Visual Studio在编译的时候,将调试版的CRT加入程序的依赖项。

  2、从Visual Studio的安装文件夹里面将D:"Program Files"Microsoft Visual Studio 9.0"VC"redist"Debug_NonRedist"x86中的Microsoft.VC90.DebugCRT整个文件夹拷贝到应用程序所在的文件夹里面,注意:

  a) 如果程序依赖的是32位的CRT,则要拷贝x86文件夹里面的Microsoft.VC90.DebugCRT文件夹,如果是先x64程序,则要拷贝x64文件夹里面。

  b) 需要确定Microsoft.VC90.DebugCRT文件夹里面的Microsoft.VC90.DebugCRT.manifest文件里面保存的版本信息而程序依赖的版本信息匹配,Microsoft.VC90.DebugCRT.manifest里面的版本信息大版本号一定要一致,小版本号一定要等于或者大于你程序依赖的CRT的小版本号。比如上例中,我们的程序是依赖于CRT 9.0.21022.8,而Microsoft.VC90.DebugCRT.manifest的版本是9.0.30729.1,这样是可以的;而8.0.30729.1就会有问题。如果大版本号一样,小版本号不一致的话,一个比较简单的方案就是修改程序的manifest文件,使其互相匹配就可以了。

  3、如果程序不是依赖调试版本的CRT,而是release版本的CRT,直接去微软的官方网站下载一个crt redist包安装上就可以了。

  

suzoulxl
2012-04-26 · TA获得超过5573个赞
知道大有可为答主
回答量:3653
采纳率:50%
帮助的人:1987万
展开全部
如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
应用程序事件日志中:
“C:\windows\system32\test.exe”的激活上下文生成失败。找不到从属程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。请使用 sxstrace.exe 进行详细诊断。
出现这类问题,是由于VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、win2000系统,把exe文件和VC的dll连接库放到一起就成了。对于winxp、win2003系统就要麻烦的多了,VC的连接库默认是被放到了winsxs目录下。
解决办法就是:使用vcredist_x86.exe再次分发程序。
下载地址:(http://download.microsoft.com/download/7/9/8/798325b7-8993-4ef9-9148-8db9ff4187fc/vcredist_x86.exe
对解决方案来说,VS设置成debug版本和release版本是不一样的。关键在于打包的时候的manifest所制定的路径不同。
对于部署的程序,VS有两套方案,共享并行程序集和私有程序集部署方法,前者其实就是依赖的东西在目标机的windows\winsxs目录下,后者要求程序自带
编译程序的时候,主要设置在两个地方,第一个是项目的general配置里面的MFC,第二个是项目配置里面的C/C++下面的Code Generation里面的Runtime Library设置里面。如果你的程序在修改过之后还能编译的话,那就可以了。
今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题“,这个问题很让我意外,以前只出现过缺少DLL的情况,而这次出现这个问题,让我一时没办法。想想,无非是两个原因引起的,要么是他没有安装VS2005的原因,要么是我的程序里依赖了其它的一些库。于是百度一下,发现好多相关主题。我是按照这个帖子解决的:
在VS2005下用C++写的程序,在一台未安装VS2005的系统上,
用命令行方式运行,提示:
“系统无法执行指定的程序”
直接双击运行,提示:
“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
以前用VC6和VS2003的话, 如果缺少库文件,是会提示缺少“**.dll”,但是用VS2005却没有这样的提示。
自己实验了一下,感觉以下几种解决办法是可行的:
方法一:
在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。
其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!
方法二:
修改编译选项,将/MD或/MDd改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
方法三:
工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
这样生成的exe文件应该就可以在其他机器上跑了。
方法四:
你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吉祥二进制
高粉答主

2015-09-07 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84580

向TA提问 私信TA
展开全部
出现此问题,一般是因为运行时库未安装或者安装设置不正确导致的。

解决方法:
在目标机器安装VCRedist_x86.exe可以解决这个问题。该文件可以在MSDN网站上下载。
地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en
如果是64位机器,请用x64版本和ia64版本
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
衾峦
2012-04-29
知道答主
回答量:1
采纳率:0%
帮助的人:1633
展开全部
是由于Microsoft Visual C++ Redistributable Package 出问题造成的。

Microsoft Visual C++ 2008 Redistributable Package (x64) 安装 Visual C++ 库的运行时组件,使用户能够在未安装 Visual C++ 2008 的计算机上运行使用 Visual C++ 开发的 64 位应用程序。(注:飞信出问题就是这玩意出错咯,重装一下就ok)

用这个补丁:http://download.microsoft.com/download/5/9/e/59e74271-2b59-49a1-b955-96b69cc34f38/vcredist_x86.exe

打过的补丁看看版本是不是出现问题了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
平凡人就是我
2012-04-26 · 超过92用户采纳过TA的回答
知道小有建树答主
回答量:467
采纳率:0%
帮助的人:159万
更多追问追答
追问
不是这个问题
追答
那就是你系统的问题了,你的系统是正版的吗?还是DIY版?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式