下载此beplayapp体育下载

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


beplayapp体育下载分类:IT计算机 | 页数:约9页 举报非法beplayapp体育下载有奖
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该beplayapp体育下载所得收入归上传者、原创者。
  • 3.下载的beplayapp体育下载,不会出现我们的网址水印。
beplayapp体育下载列表 beplayapp体育下载介绍
该【vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题 】是由【帅气的小哥哥】上传分享,beplayapp体育下载一共【9】页,该beplayapp体育下载可以免费在线阅读,需要了解更多关于【vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题 】的内容,可以使用beplayapp体育下载的站内搜索功能,选择自己适合的beplayapp体育下载,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此beplayapp体育下载到您的设备,方便您编辑和打印。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

vs2023环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题 来自beplayapp体育下载www.apt-nc.com转载请标明出处.

相关beplayapp体育下载 更多>>
非法内容举报中心
beplayapp体育下载信息