1 / 9
文档名称:

vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题.doc

格式:doc   大小:61KB   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题.doc

上传人:帅气的小哥哥 2022/11/22 文件大小:61 KB

下载得到文件列表

vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题.doc

文档介绍

文档介绍:该【vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题 】是由【帅气的小哥哥】上传分享,文档一共【9】页,该文档可以免费在线阅读,需要了解更多关于【vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
转自:
VS2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动〞的问题(IIS)
比较全的有关vs2023部署问题集〔1〕:

比较全的有关vs2023部署问题集〔2〕:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
原文地址:
VC9编译的程序在没有装过VC9〔〕的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。〞这个错误,那么就说明该程序动态链接了VC9的运行时库,〔如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库〕,以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。出现这种情况的VC9编译器可能存在3个版本,接下来分别说明:
1、没有打过任何补丁的VS2023
该版本对应的CRT/MFC/,这个版本号在后面会用到。这个版本的程序部署比较简单,直接把VC安装目录下的redist目录〔C:\ProgramFiles\\VC\redist〕中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
2、打过SP1补丁的VS2023
打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,,这导致了manifest文件中记录的版本号和实际库的版本号不一致〔程序要求它们的版本号一致才能运行〕。这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,,方法是在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:\ProgramFiles\\VC\include\,然后重新编译程序。接下来还是将VC安装目录下的redist目录〔C:\ProgramFiles\\VC\redist〕中需要的库以及对应的manifest文件拷贝到执行程序同目录下,,〔〕,这样程序到任何机器上都能够正常运行了。
3、打过SP1补丁与SP1ATL平安更新(KB973675)的VS2023
这是最新的更新。在SP1补丁之后,微软又于近日发布了一个用于智能设备的MicrosoftVisualStudio2023ServicePack1ATL平安更新(KB973675),该补丁又将CRT/MFC/ATL库的版本号升级,,这次升级比较好,manifest文件与库的版本号一致了,不像SP1一样升级的不彻底。这样只需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,接下来重新编译程序,然后直接把VC安装目录下的redist目录中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
顺便提一下,如果不想在发布程序时带上这些库和manifest文件〔如果没有必要的话〕,那么可以采用静态编译CRT和MFC,然后把manifest文件添加到资源中,这样编译出的程序只要一个exe就可以在任何机器上直接运行了。
参考文章:
1、“应用程序配置不正确,程序无法启动〞的解决方法资料收集:
有的时候,你在VisualC++上面经过好几个月的辛勤努力,终于将程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操作系统告诉你“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题〞:
一般情况下,这个问题都是由于程序不能找到所需要的C运行库〔CRT〕而引起的。
在WindowsXPSP2以后,Windows引入了Side-by-Side执行的概念,,但是Windows后来将这个概念集成到操作系统层面上来了。大家都应该知道DllHell的问题,为了解决DllHell的问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。前面的话,有点绕,举个例子:
1.        假定你编写了一个C++程序A,〔这个版本是随着VisualStudio2023〕发布的。
2.        之后你的机器升级了VisualStudio的版本,从2005升级到2023,,这个时候你的操作系统里面安装了两个版本的MFC,。
3.        你在VisualStudio2023编写了另外一个C++程序B,。
4.        如果你运行程序A的话,。
5.        如果你这时同时运行程序B,。这就是Side-by-side的执行概念。
操作系统之所以能够这样做,是因为它在加载程序A和B之前,除了查看PE格式里面A和B所依赖的Dll信息,都会查看A和B的manifest文件。Manifest文件保存了Windows可执行文件〔包括exe和dll文件〕要运行起来的环境设置信息,。。例外有的程序将manifest文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候你看不到程序的manifest文件的原因。通常来说,一个manifest文件的内容如下〔〕:
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
 
<?xmlversion=’′encoding=’UTF-8′standalone=’yes’?>
<assemblyxmlns=’urn:schemas-microsoft-com:′manifestVersion=’′>
 <trustInfoxmlns=〞urn:schemas-microsoft-com:″>
   <security>
     <requestedPrivileges>
       <requestedExecutionLevellevel=’asInvoker’uiAccess=’false’/>
     </requestedPrivileges>
   </security>
 </trustInfo>
 <dependency>
   <dependentAssembly>
     <assemblyIdentitytype=’win32′name=’’version=’′
                       processorArchitecture=’x86′publicKeyToken=’1fc8b3b9a1e18e3b’/>
   </dependentAssembly>
 </dependency>
</assembly>
上面的例子里面,,而且是调试版的,CPU架构是32位的CPU。对于将manifest文件嵌入到资源文件的程序我们也有方法看到manifest的信息。
1.        〔VisualStudio自带的manifest处理程序〕:
mt-inputresource:;#1/out:
2.        另外一种是使用dumpbin程序将整个exe的内容打印到一个文件,然后用文本编辑器翻开,搜索Assem字符串样式就能找到manifest信息:
 
解决方案
知道了程序依赖于具体哪一个dll以后,你可以将所依赖的dll拷贝到程序的安装文件夹里面,以CRT库绑定失败为例,介绍解决步骤:
1.        ,,需要32位机器版本的CRT。这个依赖项一般是因为你的程序是调试版,所以VisualStudio在编译的时候,将调试版的CRT参加程序的依赖项。
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
2.        从VisualStudio的安装文件夹里面将D:〞ProgramFiles〞″VC〞redist〞Debug_NonRedist〞,注意:
a)        如果你的程序依赖的是32位的CRT,,如果是先x64程序,那么要拷贝x64文件夹里面。
b)        ,,小版本号一定要等于或者大于你程序依赖的CRT的小版本号。比方上例中,,,这样是可以的;。如果大版本号一样,小版本号不一致的话,一个比较简单的方案就是修改程序的manifest文件,使其互相匹配就可以了。
3.        如果你的程序不是依赖调试版本的CRT,而是release版本的CRT,直接去微软的官方网站下载一个crtredist包安装上就可以了。
==============<>
如果你编译了一个VC2023的默认的CRT/MFC的应用程序,如果目标部署电脑上没有安装相应的VC2023的动态库,当运行你的程序的时个,会出现如下错误信息.
这是因为程序使用了基于VC2023的CRT/MFC的动态库版本.
解决这个问题,有三种方法:
(缺点,生成的exe的程序过于庞大)
.(缺点,只能支持发行版,调试版程序不能支持)
(放在与你的发布程序同一目录中)
 
第一种和第二种就不详细讲如何实现了,.
 
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
在你的VC2023的安装目录下有两个目录,
C:/ProgramFiles(x86)/.CRT
C:/ProgramFiles(x86)/.MFC
只要将这两个目录下的文件一同拷贝到发布程序的同一目录下:









这些是这个程序依赖的发行版动态库,同理,如果是调试版的发布程序,也一样把相应的调试动态库拷贝到相应目录.
程序如你意运行起来了!
 
但是,如果你安装的是VC2023SP1的版本的时候,问题就来了,你的程序也一样运行不起来了!
原因就是安装了VC2023SP1的时候,它把"VC/redist"用新的版本文件代替了,问题不大,但是,这个程序的版本是依赖于新的manifest的文件的,当你编译VC2023-SP1的程序的时候,它同时把RTM-version写入程序的manifest文件中,这个是旧的RTM-version,不与新版本的VC2023-SP1的"CRT/MFC"manifest版本一致,因此程序运行的时候是拒绝导入这些新的VC2023-SP1的CRT/MFC的运态库!
 
解决方法有两种.
 
方法一:
最简单的,,将新的版本号改为旧的版本号,.*.manifest的文件,也同样是如此修改!
如果是装了VC2023-SP1后,它的版本号是“″
未装VC2023-SP1前的版本号为""
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
过程如下:
将所依的动态库的及它们的manifest文件拷贝到发布应用程序的同一目录下,.*.manifest文件,将
version=""
修改为
version=""
恭喜你,你的程序运行起来了!
方法二
修改你的程序的所依赖的manifest,这样程序会依整于新的manifest.
过程如下:

这个文件中,增加如下宏定义:
#define_BIND_TO_CURRENT_VCLIBS_VERSION1
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
程序编译后就会依赖于新的manifest,版本号为
""
无须再修改manifest文件中的version版本号了.
将所依的动态库的及它们的manifest文件拷贝到发布应用程序的同一目录下
恭喜你,程序又运行起来了!
注意:如果你是想要新的MFC-feature-pack的功能,用这种方法是最好的.
注意一点,非常重要,如果已经安装了vcredist_*.exe程序包,注意的是Dll会自动把引用调到系统目录下的WinSxS目录下的,即不再引用同一目录下的动态库!
如果是编译时使用了(/clr),!
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
ofruraldrinkingwatersources,protectionofdrinkingwatersourcesinruralareasbytheendofthedelimitationofthescopeofprotection,completewithwarningsigns,isolatingnetworkprotectionfacilities
不过,在2023,编译的程序会不再需要manifest文件!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
总结如下:
使用vs2023/vs2023开发的程序有2种部署方法:共享并行程序集和私有程序集部署方法
所谓的共享并行程序集部署方法是指程序依赖的CRT、MFC、ATL的DLL和manifest文件位于目标机器上的c:/windows/winsxs目录中,发布程序的时候只需要将程序拷贝到目标机器上就可以了;私有程序集部署方法指的是发布程序程序的时候,将所依赖的crt、mfc、atl的dll放在程序的当前目录下
 
对于release版程序
比较的简单的方法是采用共享程序集的方式来部署,〔MicrosoftVisualC++2023SP1RedistributablePackage(x86)
也可以采用下面debug程序的私有程序集的部署方法
 
对于debug版本程序
◆假设目标机器安装了VS开发环境〔vs2023sp1/vs2023sp1〕,那么在机器上同时也安装了共享并行程序集,包含各个版本的dll〔、,位于C:/Windows/Winsxs目录下〕,那么不需做任何的部署,直接将需要发布的程序拷贝到目标机器上就可以了,这和release版程序的发布方式是一样的
◆在没有安装VS开发环境〔安装了vs2023sp1/vs2023sp1〕的机器上,只能采用私有程序集的方式来部署〔因为vcredist

最近更新

水产品企业营销人才培训问题研究的开题报告 2页

专业园区商业计划书 33页

智慧社区申报可行性方案 28页

文明城市可行性方案 31页

氨磷汀及其中间体新分析方法研究的开题报告 2页

开服装店可行性方案 33页

干混砂浆项目可行性方案 33页

大型垃圾场可行性方案 31页

蛇毒肽类作为靶向肿瘤治疗剂的潜力 32页

遗传病的精准医疗与靶向治疗 31页

气相法聚丙烯装置仿真培训系统的开发的开题报.. 2页

高校与企业合作可行性方案 31页

食品销售可行性方案 31页

RFID技术应用及发展前景 36页

民族国家形成与英国宗教改革关系探究的开题报.. 2页

酒店销售收益管理可行性方案 32页

民事恶意诉讼防范研究的开题报告 2页

配送中心可行性方案 27页

不倒鞋可行性分析报告 32页

死缓限制减刑司法适用研究的开题报告 2页

武汉虹信公司设备管理系统分析与设计中期报告.. 2页

运维中心可行性方案 32页

2024年房地产开发经营服务投资申请报告代可行.. 72页

2024年儿童发育投资申请报告代可行性研究报告.. 61页

2024年动力电池项目项目投资申请报告代可行性.. 63页

2024年电阻箱项目项目投资需求报告代可行性研.. 69页

2024西城初三一模数学试题(WORD版) 8页

2024年朝阳中考一模数学试题及答案 14页

变电所工程冬季施工方案 15页

连续油管作业问题及对策ppt课件 41页