游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5180|回复: 7

VS2005的程序文件分发问题及解决()

[复制链接]

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2007-12-4 13:10:00 | 显示全部楼层 |阅读模式
转载(http://dev.csdn.net/author/liguangyi/4fdf6bff0ae9472c9ff0ea814a23b03f.html)
VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、win2000系统,把exe文件和VC的 dll连接库放到一起就成了。对于winxp、win2003系统就要麻烦的多了,VC的连接库默认是被放到了winsxs目录下,结果造成在这些系统上,直接拷贝exe文件,往往是不能运行(找不到msvcr80.dll、mfc80.dll文件等),或者在事件日志中报错。

解决方式:
方式一、在目标系统上安装2005版vcredist_x86.exe。

方式二、直接拷贝VS8目录下的VC \ redist \ x86 \  目录下的 Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC几个文件夹,到exe所在的目录下,目录结构如下:
.\myapp.exe
.\myapp.dll
.\Microsoft.VC80.CRT.\Microsoft.VC80.MFC.\Microsoft.VC80.MFC\Microsoft.VC80.MFCLOC然后修改Microsoft.VC80.MFCLOC目录下的Microsoft.VC80.MFCLOC.manifest文件,将其中的version="8.0.50727.42",修改为version="8.0.50608.0"。


方式二的目录结构,在xp和2003下是没有问题的,但是在win98/win2000中,因为exe和dll不在同一目录下,就会出现找不到dll的问题。

有什么更好的解决呢?呵呵,国外的一个大牛(http://blog.kalmbachnet.de)找到一绝招:

方式三、
  1、首先编译myapp.exe的时候,在配置中,选择生成单独的manifest文件,如:myapp.exe.manifest。
  2、将myapp.exe、myapp.exe.manifest拷贝到一个目录下
  3、将Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC几个目录下的文件,都拷贝到myapp.exe所在的目录下。
  4、将Microsoft.VC80.MFCLOC.manifest文件中的version="8.0.50727.42",修改为version="8.0.50608.0"。
  5、编辑myapp.exe目录下的所有 .manifest文件,将文件中的publicKey键值删除,一般是publicKeyToken="1fc8b3b9a1e18e3b"
  6、然后运行myapp.exe看看,嗯。



41

主题

148

帖子

184

积分

注册会员

Rank: 2

积分
184
QQ
发表于 2007-12-8 13:04:00 | 显示全部楼层

Re: VS2005的程序文件分发问题及解决()

不用这么麻烦,你找一个vs2003的工程,升级到vs2005编译后运行,是不是发现没有这个问题?但是如果新建一个vs2005的工程,加入完全一样的源代码,发现这个问题确实存在.
仔细比较一下两个项目的属性配置,看看你能发现什么.

0

主题

6

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2007-12-11 11:11:00 | 显示全部楼层

Re: VS2005的程序文件分发问题及解决()

◎快乐魔导师

我尝试了“比较2003升级到2005”和“直接生成2005”两种做法生成的.vcproj文件,对比结果看不出显著的区别,除了一些名字的区别,最重要的也许是        “        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"”这一句,它的内容如下:
<?xml version="1.0"?>
<VisualStudioPropertySheet
        ProjectType="Visual C++"
        Version="8.00"
        Name="Upgrade From VC 7.1">
        <Tool
                Name="VCCLCompilerTool"
                PreprocessorDefinitions="_VC80_UPGRADE=0x0710"
        />
        <Tool
                Name="VCResourceCompilerTool"
                PreprocessorDefinitions="_VC80_UPGRADE=0x0710"
        />
</VisualStudioPropertySheet>

也看不出什么。可以讲清楚些么?谢谢。


sf_20071211111118.rar

2.43 KB, 下载次数:

6

主题

471

帖子

1047

积分

金牌会员

Rank: 6Rank: 6

积分
1047
发表于 2007-12-11 11:46:00 | 显示全部楼层

Re:VS2005的程序文件分发问题及解决()

搞这么麻烦干吗,直接用MFC静态库编译不就行了,累赘。

41

主题

148

帖子

184

积分

注册会员

Rank: 2

积分
184
QQ
发表于 2007-12-11 20:44:00 | 显示全部楼层

Re: VS2005的程序文件分发问题及解决()

现在身边没装VC,大概给你说一下。
你找到属性里面(右键点击项目名称),有一个选项“链接库类型”(大概是类似这样意思的一个选项),里面有5个,有1个是从项目继承,有2个是XXX/mt XXX/mtd,(XXX代表中文,记不清楚),还有2个其他类似的选项,选择/mtd或/mt,然后你再试验一下。

41

主题

148

帖子

184

积分

注册会员

Rank: 2

积分
184
QQ
发表于 2007-12-11 20:45:00 | 显示全部楼层

Re:VS2005的程序文件分发问题及解决()

至于filx说的MFC静态库编译,我从来不用MFC,所以不好发表意见了^_^

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-12-12 21:23:00 | 显示全部楼层

Re:VS2005的程序文件分发问题及解决()

项目属性->配置属性->C/C++->代码生成->运行时库
设置为 多线程(/MT) .
生成的exe文件会大很多.但是,我认为这是目前我所知的最好解决方法.

0

主题

6

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2007-12-17 14:48:00 | 显示全部楼层

Re:VS2005的程序文件分发问题及解决()

晕倒了,原来是指静态连接不使用dll啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-14 19:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表