当前位置: 代码迷 >> VC >> 怎么让小弟我静态编译的vc2008工程能够在所有的xp都跑起来
  详细解决方案

怎么让小弟我静态编译的vc2008工程能够在所有的xp都跑起来

热度:9869   发布时间:2013-02-25 00:00:00.0
如何让我静态编译的vc2008工程能够在所有的xp都跑起来?
两百分求解!
开发环境:vc2008,版本9.0  sp1
工程设置:Multi-threaded DLL (/MD);Use Unicode Character Set;Use MFC in a Static Library
使用了cximage,cximage的工程设置与主工程设置相同。cximage和主工程在一个solution中,以依赖工程的形式存在。

问题:编译出来后,按照上面的设置,应该只需要一个执行文件就可以执行,但是在一个干净的xp上却弹出下面得错误
“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”。我用了下面提到的一个方法可以运行了,但是不是我想要的方式,

我的需求是:
我只是做的一个小程序,为了运行我的小程序,还要目标机安装一个vcredist_x86.exe的程序,我觉得有点不合适,因此我想寻求一种方法,是否只要拷贝几个合适的dll就能让我的程序运行起来?都需要哪些dll?


参考:
1,我在网上查了一些资料,说这个原因还是xp上没有安装合适的库文件,需要根据myproject.exe.intermediate.manifest中的设置宝贝适当的dll过去,于是我查看了我的这个设置文件,如下:,但是拷贝了相关的这些dll到程序所在目录并不起作用。
<?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.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.30729.1' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.MFC' version='9.0.30729.1' 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>

2,后来我又查到第二个方案,在目标xp上安装vcredist_x86.exe这个安装包,于是安装后程序能运行起来。

------最佳解决方案--------------------------------------------------------
静态就没问题了

你的还需要改c/c++--->代码生成---》运行时库 改为(多线程/MT)
------其他解决方案--------------------------------------------------------
UP
------其他解决方案--------------------------------------------------------
Microsoft.VC80.DebugCRT.manifest
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll

带上这几个东西,注意要用release版本才行.
这几个东西在安装目录都有,把名字复制过去搜索一下就搜索出来了.
这个肯定是可以的,我目前这个项目就是这么做的.
------其他解决方案--------------------------------------------------------
你和程序运行不起来的根本原因:依赖的库不仅需要DLL文件,还需要对应的.manifest文件。

举例:
如果依赖msvcr80.dll文件,则需要拷贝msvcr90.dll和Microsoft.VC90.CRT.manifest。

对于其它的文件楼主应该知道了,我就不多说了。(自己工程文件、cximage.dll)