vc2008在vista下编译的程序无法在XP系统下运行

simouse 2009-06-22 01:06:33
同样的安装程序在干净的Vista下是可以用的,在 XP下不可以,所有的依赖DLL我都找到了,可还是不行。

这个问题谁遇到过?有没有好的办法?
...全文
429 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
雅菲 2010-01-14
  • 打赏
  • 举报
回复
我也遇到了相似的问题,正在学习中
skyxie 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 simouse 的回复:]
感谢大家的关注,我在XP下编译过后还是无法在干净的机器上运行,用dependency walker看了下主程序,发现列表里有个MPR.DLL的文件是红色的,你们知道这个是什么东西吗?装完vc2008后就可以跑,是不是说明在装vs2008时有些系统的东西得到了更新呢?
[/Quote]

mpr.dll 右键 -- 属性: Multiple Provider Router DLL
Windows Networking Functions (WNetxxx) 依赖于这个库
这个库从win2k就有了
应该就是结构体大小的问题~

ps,在xp下vs2008默认的winver仍然是vista
biweilun 2009-06-22
  • 打赏
  • 举报
回复
运行库版本太低
simouse 2009-06-22
  • 打赏
  • 举报
回复
感谢大家的关注,我在XP下编译过后还是无法在干净的机器上运行,用dependency walker看了下主程序,发现列表里有个MPR.DLL的文件是红色的,你们知道这个是什么东西吗?装完vc2008后就可以跑,是不是说明在装vs2008时有些系统的东西得到了更新呢?
303afei 2009-06-22
  • 打赏
  • 举报
回复
我感觉可能是d3d9.dll的问题吧。
oyljerry 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 simouse 的回复:]
忘了补充下:我在XP下没有用DirectX10的东西,只是其它的DLL编译是在vista下做的。
[/Quote]
你可以把代码都拿到XP下编译一下..
skyxie 2009-06-22
  • 打赏
  • 举报
回复
vista下编译dll的时候 dll工程的winver也要设成xp

如果还不行
xp下面用你用dependency walker看看, 是什么库没有找到/不能识别
simouse 2009-06-22
  • 打赏
  • 举报
回复
忘了补充下:我在XP下没有用DirectX10的东西,只是其它的DLL编译是在vista下做的。
arong1234 2009-06-22
  • 打赏
  • 举报
回复
个人觉得在一个os上编译的程序到另外一个os上运行本来就该有问题,你应该在xp平台上重新编译一遍
simouse 2009-06-22
  • 打赏
  • 举报
回复
oyljerry, 您的建议很好,我是因为想用DirectX10才在vista上编译的,看来还是发行版本应在一个XP环境下编译了,我去试下,多谢。
skyxie 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 simouse 的回复:]
skyxie, 你的方法我试了,还是不行。

“应用程序正常初始化(0xc0150002)失败,请单击“确定”,终止应用程序。”

这个我猜的是vista的核心库比xp的新导致的。
[/Quote]

这个看样子是依赖不全造成的啊~

你用dependency walker看看, 确认你依赖的dll都全了~
oyljerry 2009-06-22
  • 打赏
  • 举报
回复
先看是什么错误,还有你用到的DLL版本等功能都比XP高,XP不一定支持
你应该在xp上开发,然后把程序放到vista上支持运行
simouse 2009-06-22
  • 打赏
  • 举报
回复
skyxie, 你的方法我试了,还是不行。

“应用程序正常初始化(0xc0150002)失败,请单击“确定”,终止应用程序。”

这个我猜的是vista的核心库比xp的新导致的。
fengrx 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skyxie 的回复:]
所有的依赖DLL我都找到了
--------------------------------------------
VS2008生成的项目有个targetver.h,里面定义的windows版本为Vista!
vista某些结构体的size比XP的大! 会造成在xp上运行时出错

把 targetver.h 里面的 0x0600 修改为 0x0500(win2k) or 0x0501 (xp)

----------------------------------------------------------------------------
#ifndef WINVER                  // Specifies that the minim…
[/Quote]

有道理。
lzd 2009-06-22
  • 打赏
  • 举报
回复
有什么错误提示吗? 静态连接试一下
skyxie 2009-06-22
  • 打赏
  • 举报
回复
所有的依赖DLL我都找到了
--------------------------------------------
VS2008生成的项目有个targetver.h,里面定义的windows版本为Vista!
vista某些结构体的size比XP的大! 会造成在xp上运行时出错

把 targetver.h 里面的 0x0600 修改为 0x0500(win2k) or 0x0501 (xp)

----------------------------------------------------------------------------
#ifndef WINVER // Specifies that the minimum required platform is Windows Vista.
#define WINVER 0x0501 // WinXP
#endif

#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista.
#define _WIN32_WINNT 0x0501 // WinXP
#endif
beyonld 2009-06-22
  • 打赏
  • 举报
回复
关注,UP

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧