随笔 - 96  文章 - 255  trackbacks - 0
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

E-mail:zbln426@163.com QQ:85132383 长期寻找对战略游戏感兴趣的合作伙伴。

常用链接

留言簿(21)

随笔分类

随笔档案

SDL相关网站

我的个人网页

我的小游戏

资源下载

搜索

  •  

积分与排名

  • 积分 - 441012
  • 排名 - 31

最新评论

阅读排行榜

评论排行榜

        VC2005和VC2008编译出来的程序放到别人的电脑上为什么有可能无法运行呢?
        这个问题无数人在问,但是很遗憾,没有人给出完整的解释和完美的解决方案。其实我也只有一台电脑,而且装了VC了,这个问题必须要台没有装这类软件的电脑才容易去分析。感谢那些为了测试我小程序的朋友,是你们一次次在如此恶劣的网络速度下收取我一次次修改的dll包和部署文件,才让这个问题的完美解决方案浮出水面。这里就把我的经验给大家分享吧。

1:Microsoft Visual C++ 2008 Express Edition可以发布软件吗?

        能!
        很多人说,因为是Express版,不是Studio,所以只是用来练习语言的,不能发布软件——错!
        除了没有MFC和ATL,基本上跟 .net 版本是一样的。发布出来的,是完整的可执行文件。

2:VC 2008 (2005) 发布出来的程序必须附带上他们特定的dll文件吗?

        不一定。
        如果目标系统是个经常升级的系统,微软已经为其打上了所需要的dll文件补丁了,不需要在软件包里面附加特定的dll文件。特别在Vista系统中,你更是不需要VC8和VC9的dll文件。但是在一些老版本的系统中,这些文件就是必须的。

3:VC2008和VC2005特定的dll文件是哪些?

VC8: msvcm80.dll, msvcp80.dll, msvcr80.dll
VC9: msvcm90.dll, msvcp90.dll, msvcr90.dll

4:如何部署文件?

首先,请选择release版本;在生成可执行文件(exe文件)的时候,会得到相应的部署文件(manifest文件)。
比如,得到a.exe文件,就会同时生成a.exe.intermediate.manifest文件。请将这2个文件放在同一文件夹下。
然后,你需要VC8和VC9的部署文件:Microsoft.VC80.CRT.manifest和Microsoft.VC90.CRT.manifest。
请到你的VC安装目录下寻找,比如:
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
我这里也把2个部署文件直接贴出来,没装的直接用就是了:
Microsoft.VC80.CRT.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable></noInheritable>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
<file name="msvcr80.dll" /> <file name="msvcp80.dll" /> <file name="msvcm80.dll" />
</assembly>
Microsoft.VC90.CRT.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation.  All rights reserved. -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    
<noInheritable/>
    
<assemblyIdentity
        
type="win32"
        name
="Microsoft.VC90.CRT"
        version
="9.0.21022.8"
        processorArchitecture
="x86"
        publicKeyToken
="1fc8b3b9a1e18e3b"
    
/>
    
<file name="msvcr90.dll" /> <file name="msvcp90.dll" /> <file name="msvcm90.dll" />
</assembly>
然后将VC8的3个dll以及这个manifest装到一个文件夹里,并将文件夹命名为Microsoft.VC80.CRT。
同样将VC9的3个dll以及这个manifest装到一个文件夹里,并将文件夹命名为Microsoft.VC90.CRT。
将这2个文件夹放到与exe文件(及其部署文件)所在目录下就OK了。
至于为什么VC9编译的程序要用VC8的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.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    
</dependentAssembly>
  
</dependency>
</assembly>
VC 2008生成出来就需要VC90和VC80的CRT,我们能有什么脾气呢……
也就是说,还别管你exe文件多大,要保证正常运行,我们需要首先拷贝这8个文件……
MinGW(gcc)编译的就没这些麻烦。所以,我现在都是用两个编译器编译两个exe以供发布了。
posted on 2008-04-12 01:51 lf426 阅读(18407) 评论(19)  编辑 收藏 引用 所属分类: Win32与VC

FeedBack:
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-05-02 14:06 noname
呵呵,我用 vc2008 做的东西就不需要 vc8 的 dll。  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-05-03 00:40 lf426
一直在官方升级的xp和2k3基本上不需要vc80和vc90的dll,Vista就更不需要了。但是问题是有多少人能在官方升级的。:)珍惜生命,拒绝盗版^^  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-06-11 04:51 x11
为什么不用不用VC6呢,什么DLL都不需要,呵呵  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-06-12 23:12 awshome
之后.考到目标计算机上就可以了吗.我用VC2008 MFC 写的程序.到XP上说什么无法定位 mfcm90u.dll.我已经装了./VC2008 的运行库了.还是不能运行?  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-06-13 00:05 lf426
我用的是Express Edition,没有MFC这些。估计你还是要参考下程序的布局文件(manifest),看看需要的dll以及应该放在什么位置。  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-06-15 10:15 cnhome
还就是VC6编译的程序好用,走遍天下无敌手啊
  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-06-15 18:59 lf426
传说中,VC6对C++标准支持不好——当然,实际上我个人还没遇到特别严重的情况——因为我用的C++还很初级:) 这个要怪只能怪M$自己,自己搞了太多概念,太多自己的标准。  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-06-26 10:33 空明流转
VC6是在C++标准之前出的。  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-06-26 20:33 Simon
非常感谢!我在Xubuntu8.04+Wine1.0上装Tencent Messenger 2008时就遇到了这样的问题。安装运行时提示需要ATL80.DLL、MSVCP80.dll、MSVCR80.dll和Microsoft.VC80.CRT,按照你文中所讲处理后问题解决。
只是又有新提示还需要Microsoft.VC80.ATL,搜了一圈也没找到,方便再提供代码给我吗?
先多谢了!
ifw_simon AT hotmail DOT com  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-06-26 22:29 lf426
我装的Express版的,没有ATL和MFC库,你得拜托装了完整版vs2005.net的朋友给你找个配置文件哈。  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-06-27 10:03 Simon
@lf426
噢,明白了,非常感谢啦!  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2008-08-31 20:11 孤山客
好像大家都不懂哎

VC6也是需要dll的,因为系统都已经自带的而已【太老了吗嘛】

VC89其实也不用带的,前提是你选择静态链接运行库。

反而是GNU是不行的,根据LGPL协议你是不能静态链接标准库的,当然你可以选择别的协议的标准库,不用GNU自带的库。  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-09-02 13:08 lf426
LGPL也可以静态编连的,只要一并公开源代码就可以了。:)  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2008-10-15 19:57 aaaa
Visual C++ 2008 什么时候脱离Net Framwork DLL而独立可运行啊????????????????  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2009-06-07 16:28 Coolsunsky
我跟你一样啊  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题[未登录] 2010-01-27 10:19 
为啥不安装一下Microsoft Visual C++ 2008 Redistributable Package呢?   回复  更多评论
  
# re: Microsoft Visual C++ 2008 發佈程序的部署問題 2010-08-17 17:48 CROMA
裝了 VS2008 SP1 以後好像就不適用這個方法了 orz
  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2010-10-16 22:42 莉萨
装个Redistribution Package就好了阿.
还有就是别把Debug的搞成Release拿出去就好了.

曾经碰到最恶心的问题是一个2008的c#的solution,link了一个vc6的库,一个vc9的c#库,c#库link了一个vc9的cli库.

悲惨的是,做vc6,vc9cli,vc9c#,还有整个solution的人分别在两个地方,然后正好挨到升级2008sp1的那几天....

那叫一个悲剧阿....link error导致项目delay了1个月  回复  更多评论
  
# re: Microsoft Visual C++ 2008 发布程序的部署问题 2015-06-11 17:40 fromse
好贴!经验证是可行的。  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理