zoukankan      html  css  js  c++  java
  • (转)Visual C++ 2008(或加上Feature Pack)发行后到未装vc9上运行提示"应用程序配置不正确" 的解决方案

     

    环境:Visual C++ 2008 英文版 加上Visual C++ 2008 Feature Pack

    使用向导创建的VisualStudio2005的界面

    Debug和Release在本地都可以运行 但是只要复制到别的电脑上就提示"由于应用程序配置不正确,应用程序未能启动...."

    编译条件:

    Use MFC in a Shared DLL(共享库)

    Multi-threaded Debug DLL (/MDd)

    通过查看*.exe.intermediate.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>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.DebugMFC' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
        </dependentAssembly>
      </dependency>
    </assembly>
    解决方案1:
    将文件设置为静态链接库,则没有问题,但是绑定静态库未免太大,并且不论是你的exe还是dll都要静态....无故增加大小
     
    解决方案2:
    采用VisualStuido自带的"安装部署"来做安装程序,但是生成的文件起码要加上13M,并且如果不会用这个玩意(我这人觉得InnoSetup比这个好用多了),哪安装的时候很多功能都不会实现了
     
    解决方案3:
    经过我使用Total Uninstall对上述"安装部署"生成msi的东西进行监控,和数次的实验,发现只要依下面的做就可以了,也不需要在程序根目录打包dll

    只要将 C:\Windows\WinSiS下的如下文件复制到目标电脑的C:\Windows\WinSiS目录即可...

    ├─Manifests 

    │      x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_71382c73.cat 

    │      x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_71382c73.manifest 

    │      x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_421e9f78.cat 

    │      x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_421e9f78.manifest 

    │      

    ├─Policies 

    │  ├─x86_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75 

    │  │      9.0.30411.0.cat 

    │  │      9.0.30411.0.policy 

    │  │      

    │  └─x86_policy.9.0.Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_x-ww_4ee8bb30 

    │          9.0.30411.0.cat 

    │          9.0.30411.0.policy 

    │          

    ├─x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_71382c73 

    │      msvcm90.dll 

    │      msvcp90.dll 

    │      msvcr90.dll 

    │      

    └─x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_421e9f78 

            mfc90.dll 

            mfc90u.dll 

            mfcm90.dll 

            mfcm90u.dll 

    排版排死我了,总显示乱!

    大家可以发现有一个东西1fc8b3b9a1e18e3b,出现在了*.exe.intermediate.manifest 文件和WinSiS的文件夹.这个我没有研究过...有研究的可以研究下

    另外由于我的*.exe.intermediate.manifest 文件里面有MFC和CRT,大家可以看到WinSiS也只拷贝了这两个东西

    这样自己做安装程序就没有问题了,发布程序的时候不用带*.exe.intermediate.manifest 文件,直接exe就可以了,exe放在哪个目录下都可以打开...只要目标电脑上有上述的几个文件

    此问题花了我一天时间...在CSDN上问了两次,最后自己实验出来的!

    我在一台没有装vc9,8,7的2003机子上测试通过

  • 相关阅读:
    perfnet错误 事件ID:2004 无法打开服务器服务。服务器性能数据将不会被返回。
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题
    oracle从dmp文件做数据恢复
    python预科5--函数及lambda匿名函数
    pytest 运行SyntaxError: invalid syntax
    java自动化--testNG集成extentreports(好坑,编辑的时候样式好的,但是发布了就这鬼样子还不能上图)
    git 命令
    java 5
    java JsonMapper
    java springboot mybatis整合
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/1250828.html
Copyright © 2011-2022 走看看