解决应用程序依赖问题:使用 Visual C++ Redistributable (x64) (解决应用程序数字签名过旧)_热门资讯_【聚客圈】_激活码商城_营销软件商城_微商软件

【同步智客】

同步智客

【代理加盟】

代理加盟

【综合商城】

软件商城

【微商必备】

微商必备

【营销必备】

营销必备

【知识付费】

知识付费

【代理项目落地训练营】

项目落地训练营

解决应用程序依赖问题:使用 Visual C++ Redistributable (x64) (解决应用程序数字签名过旧)

suetone 2024-05-08 5浏览 0评论

简介

应用程序依赖问题是一种常见问题,可能导致应用程序无法在计算机上正确运行。一种常见的依赖问题是应用程序需要特定版本的 Visual C++Redistributable 才能运行。如果计算机上没有安装正确的 Visual C++ Redistributable,则应用程序可能会崩溃或显示错误消息。本文将指导您如何使用 Visual C++ Redistributable (x64) 解决应用程序依赖问题。

步骤 1:确定所需的 Visual C++ Redistributable 版本

第一步是确定应用程序需要的 Visual C++ Redistributable 版本。为此,请查看应用程序的文档或联系应用程序开发人员。

步骤 2:下载 Visual C++ Redistributable

一旦您知道了所需的 Visual C++ Redistributable 版本,就可以从 Microsoft 网站下载它:[Visual C++ Redistributable 下载页](

步骤 3:安装 Visual C++ Redistributable

下载 Visual C++ Redistributable 后,请双击安装文件并按照屏幕上的说明进行操作。

步骤 4:运行应用程序

安装 Visual C++ Redistributable 后,请尝试再次运行应用程序。它应该现在可以正常运行了。

修复应用程序数字签名过旧的问题

在某些情况下,应用程序可能会显示“应用程序数字签名过旧”的错误消息。这表示应用程序是由较旧版本的 Visual C++ Redistributable 签名的。要解决此问题,请执行以下步骤:1. 下载并安装 Visual C++ Redistributable 的最新版本。2. 重新签名应用程序。为此,请使用以下命令:```signtool sign /v /t/cs DigiCertSHA2ExtendedValidationCodeSigningCA ./MyApp.exe```3. 再次运行应用程序。它现在应该可以正常运行了。

结论

使用 Visual C++ Redistributable (x64) 是解决应用程序依赖问题的常见方法。通过按照本文中的步骤操作,您可以轻松解决应用程序依赖问题并使应用程序正常运行。

Microsoft Visual C++2005 Redistributable是微软应用程序运行所需要的运行时库,根据问题描述原因是未卸载之前的版本,解决方法只需要卸载之前的版本即可,用户可以参考如下卸载方法:

1、通过控制面板进行卸载, 同时按WIN+R键,打开“运行”对话框,输入control,按回车键,打开“控制面板”,点击“卸载程序”,找到Microsoft Visual C++2005 Redistributable,右键选择“卸载”即可。如下图示例所示:

2、通过360、qq管家等软件的应用程序管理软件进行卸载。以qq管家为例,打开“软件管理”,左侧点击“卸载“,右侧找到Microsoft Visual C++2005 Redistributable,点击“卸载”即可。

3、通过以上任何方法卸载后,都可以通过360、qq管家等软件对注册表进行拉圾清理,以确保卸载干净。

Microsoft Visual C++ 2008 Redistributable是做什么用的?

是控制运行组件的。

MicrosoftVisualc++2008RedistributablePackage(x86)将为Visualc++库安装必要的运行时组件,

允许用户在没有安装Visualc++2008SP1的计算机上运行使用Visualc++SP1开发的应用程序。

MicrosoftVisualc++2008RedistributablePackage(x86)将为Visualc++库安装必要的运行时组件,

允许用户在没有安装Visualc++2008SP1的计算机上运行使用Visualc++SP1开发的应用程序。

这个包安装了C运行时(CRT)、标准c++、ATL、MFC、OpenMP和MSDIA库的运行时组件。支持并行部署模型的库

(CRT、SCL、ATL、MFC、OpenMP),这些运行时组件被安装到支持并行程序集的Windows操作系统的本地程序集缓存(也称为WinSxS文件夹)中。

扩展资料:

微软Visualc++2005是一个集成开发环境的编程,为专业程序员。

微软Visualc++2005可重新发布版本只是一个运行时。所有用MicrosoftVisualc++2005编写的软件(如QQ)都必须有这个库才能运行。类似地,MicrosoftVisualc++2008是一个集成的开发环境。

MicrosoftVisualc++2005Redistributable是许多MicrosoftVisualc++2008软件(如fett)必须运行的运行时。

同样高级版本不会取代低级版本,并且不要假设MicrosoftVisualc++2008可重新发布版本会卸载MicrosoftVisualc++2005可重新发布版本。

很多软件都需要这些库,所以不要直接删除它们。只有用MicrosoftVisualc++6.0编写的软件才能独立于这些运行时运行。

电脑应用程序错误,怎么办?

VC9编译的程序在没有装过VC9(确切的说是 Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。 重新安装应用程序可能会纠正这个问题。 ”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。 出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:1、没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0..8,这个版本号在后面会用到。 这个版本的程序部署比较简单,直接把VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。 2、打过SP1补丁的VS2008打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0..8和9.0..1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运行)。 这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,均为9.0..1,方法是在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h文件中,然后重新编译程序。 接下来还是将VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,然后修改manifest文件中依赖项的版本号为9.0..8,这样使得程序误以为该目录下库的版本号为9.0..8(实际上是9.0..1版本),这样程序到任何机器上都能够正常运行了。 3、打过SP1补丁与SP1 ATL 安全更新 (KB)的VS2008这是最新的更新。 在SP1补丁之后,微软又于近日发布了一个用于智能设备的 Microsoft Visual Studio 2008 Service Pack 1 ATL 安全更新 (KB), 该补丁又将CRT/MFC/ATL库的版本号升级,为9.0..4148,这次升级比较好,manifest文件与库的版本号一致了,不像SP1一样升级的不彻底。 这样只需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,接下来重新编译程序,然后直接把VC安装目录下的redist目录中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。 顺便提一下,如果不想在发布程序时带上这些库和manifest文件(如果没有必要的话),那么可以采用静态编译CRT和MFC,然后把manifest文件添加到资源中,这样编译出的程序只要一个exe就可以在任何机器上直接运行了。 参考文章:1、“应用程序配置不正确,程序无法启动”的解决方法资料收集:有的时候,你在Visual C++上面经过好几个月的辛勤努力,终于将程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操作系统告诉你“由于应用程序配置不正确,应用程序未能启动。 重新安装应用程序可能会纠正这个问题”:一般情况下,这个问题都是由于程序不能找到所需要的C运行库(CRT)而引起的。 在Windows XP SP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是提出来的,但是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文件就应该是。 例外有的程序将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 version=9.0..8processorArchitecture=x86 publicKeyToken=1fc8b3b9a1e18e3b /></dependentAssembly></dependency></assembly>上面的例子里面,就说明这个程序依赖于CRT 9.0,而且是调试版的,CPU架构是32位的CPU。 对于将manifest文件嵌入到资源文件的程序我们也有办法看到manifest的信息。 1. 一种是使用(Visual Studio自带的manifest处理程序):mt ;#1 /2. 另外一种是使用dumpbin程序将整个exe的内容打印到一个文件,然后用文本编辑器打开,搜索Assem字符串样式就能找到manifest信息:解决方案知道了程序依赖于具体哪一个dll以后,你可以将所依赖的dll拷贝到程序的安装文件夹里面,以CRT库绑定失败为例,介绍解决步骤:1. 从上例中我们知道程序依赖的库,版本号是9.0..8,需要32位机器版本的CRT。 这个依赖项一般是因为你的程序是调试版,所以Visual Studio在编译的时候,将调试版的CRT加入程序的依赖项。 2. 从Visual Studio的安装文件夹里面将D:Program FilesMicrosoft Visual Studio 9.0VCredistDebug_NonRedistx86中的整个文件夹拷贝到应用程序所在的文件夹里面,注意:a) 如果你的程序依赖的是32位的CRT,则要拷贝x86文件夹里面的文件夹,如果是先x64程序,则要拷贝x64文件夹里面。 b) 你需要确定文件夹里面的文件里面保存的版本信息而你程序依赖的版本信息匹配,里面的版本信息大版本号一定要一致,小版本号一定要等于或者大于你程序依赖的CRT的小版本号。 比如上例中,我们的程序是依赖于CRT 9.0..8,而我们的的版本是9.0..1,这样是可以的;而8.0..1就会有问题。 如果大版本号一样,小版本号不一致的话,一个比较简单的方案就是修改程序的manifest文件,使其互相匹配就可以了。 3. 如果你的程序不是依赖调试版本的CRT,而是release版本的CRT,直接去微软的官方网站下载一个crt redist包安装上就可以了。 最新回复 winston at 2009-9-26 15:13:21 Windows XP 以后系统采用一种新的方式来链接dll。 就是其实是一段dll。 它可以单独存在也可以嵌入到dll/exe中。 如果单独存在的时候,就是exe名字后加一个. 比如。 那么可以生成一个和它放在一起。 我们可以使用工具来生成一个exe需要的manifest。 系统会根据Manifest来加载所需要的dll。 Windows目录下也多了一个目录叫 WinSXS,这里放了不同版本的系统dll。 比如各种不同版本的VC/MFC运行库。 这个不同版本不会互相干扰,总的来说。 Manifest解决了dll hell问题。 不过随之而来的问题是,大部分的 2005的用户在新建“win32项目-windows应用程序”的时候,新建的工程都通不过去,出现如下提示: Solution to “ not found”“,没有找到,因此这个应用程序未能启动。 重新安装应用程序可能会修复此问题。 ”明明是装了VC的。 系统也明明有这个MSVRD80D的。 为啥呢?因为现在有manefiset检查功能,如果manifest有问题。 产生原因有多种:其一是用户链接了静态库,这个静态库却链接了其他版本的MSVCRT库,检查一下。 其二是VS的问题,编译生成的manifest有问题。 可以从菜单里选择:? Project/Properties/Linker/Manifest File/Generate Manifest?? 改成Yes,让VC生成manifest.如上情况不起作用。 可以参考我从网上找到的一些方法。 或者改用静态链接到C++运行库和MFC库。 另外,有人说重新编译CRT的库,这个我个人太不推荐。 :) 以下是我从网上招的资料,也比较有效:解决方案一微软对于这个问题应该也有处理,不过感觉不是很人性化。 在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。 (注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用:)解决方案二找到你的工程的文件夹,如(myproject),找到其下的myproject\myproject\Debug\ ,把它删掉(删掉整个Debug目录也可以),重新编译,搞定!解决方案三首先找到你的安装目录(如我的是E:\Program Files\Microsoft Visual Studio 8),定位到Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application文件夹,备份这个Application文件夹)打开html\2052,看到两个文件了吧,就那个了,打开,在266行“ ”后回车,然后插入一下内容:选择你所使用的文件系统:<INPUT TYPE=radio checkedACCESSKEY=F>FAT32(F) <INPUT TYPE=radioACCESSKEY=N>NTFS(N)好,保存关闭,这个改完了,准备下一个。 打开scripts\2052,这里就一个文件,ue打开它,找到138行 var bATL = (”SUPPORT_ATL”) 其后回车,插入如下内容:var MFTool = (VCManifestTool); 32Workaround = true; 好,继续找到210行(源文件的210,你加了上边的语句就不是210了)config = (”Release”)注意这次要在这行“前边”加如下内容:if(bFAT32) { var MFTool = (VCManifestTool); 32Workaround = true; } 好了,终于都改完了,打开你的 2005新建一个win32应用程序看看吧,效果还不错吧原理和用途dll是被动态调用的,所以会被若干个程序共享使用的 但是如果dll在应用程序不知道的情况下升级了、或是被另一个程序更改了,就可能会出现问题,即”DLL Hell”随着系统资源越来越丰富,硬盘不那么紧张,所以在XP以后的操作系统中,用新的机制来管理DLL(这种机制,这不仅仅是对于而言,对于普通的Native程序也是一样的)Madifest是个XML的描述文件,对于每个DLL有DLL的Manifest文件,对于每个应用程序Application也有自己的Manifest对于应用程序而言,Manifest可以是一个和exe文件同一目录下的文件,也可以是作为一个资源嵌入在exe文件内部的(Embed Manifest)XP以前版本的windows,会像以前那样执行这个exe文件,寻找相应的dll,没有分别Manifest只是个多余的文件或资源,dll文件会直接到system32的目录下查找,并且调用而XP以后的操作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表(此时获得的,并不直接是DLL文件的本身的位置,而是DLL的manifest)操作系统再根据DLL的Manifest去寻找对应的DLL<因此就可能区别不同版本的同一个DLL文件,或是指定一个程序本身Isolated的DLL>不过使用Visual Studio 2005以后的一个新问题是,VS2005带的8.0新版的C运行库(VC 8.0 CRT)文件在XP以后支持manifest的Windows版本中被调用时,将会check一下Application自身的Manifest,否则将会拒绝被调用。 这也就是说,使用Visual Studio开发的Application,Manifest将是必不可少的(搞不懂MS为啥要这样设置,所以与不同了。 后来想想,除了MS自己说的哪些冠冕堂皇的原因,至少这样一来Linux的Wine模拟要麻烦多了)除非,你的程序是静态链接的,没有使用dll,只使用了操作系统核心的 , , , 或 等。 project的设置必须是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support那么你可以不需要考虑Manifest 可以关掉它VS2005中Menifest相关的设置Project/Properties/Linker/Manifest File/Generate Manifest 决定是否生成Manifest,如上情况才可以关闭 Project/Properties/Linker/Manifest File/Allow Isolation 这个是设置DLL的调用的,并不能决定Manifest是否还是必须的 Project/Properties/Manifest Tool/Input and Output/Embed Manifest 决定Manifest是个单独的文件还是嵌入到exe内的资源对于我来说,使用SDL必须是启用DLL的动态链接方式,所以必须开启Manifest,并且让Manifest Embed进入exe比较方便与上面内容相应的 是关于如何发布软件的问题,事实上只有VC6.0的CRT库是绑定作为Windows的一部分的,之后从开始,VC程序制作安装包也是要考虑库文件的,只不过VC6.0时推荐拷入System32,时推荐放在exe文件local目录,而现在VS2005则还需要考虑Manifest的问题了,看似麻烦,其实也还好,VS自带工具打包,下面一些网址也有讲如何手工做redistribution

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

解决应用程序依赖问题:使用 Visual C++ Redistributable (x64) (解决应用程序数字签名过旧) 第1张
发表评论
欢迎你第一次访问网站!