VS2010最大的硬伤,编译出来的程序如何在XP SP2以下的系统运行
VS2010最大的硬伤,编译出来的程序怎么在XP SP2以下的系统运行
由于VS2010的运行库使用了EncodePointer等只有XP SP2以上的系统才支持的API,所以VS2010编译出来的程序无法在XP SP2以下的系统运行,不论是Win32程序还是MFC程序都不行,另试过如下方法,也都不行:
1、链接非DLL运行库(/MT、/MTd),不行
2、静态链接MFC,不行
3、定义WINVER、_WIN32_WINNT为0x0500,不行
请问有什么方法可以让VS2010编译出来的程序运行在XP SP2以下的系统,最好是简单的方法,诸如替换link.exe、.lib的方法就不用了。
------解决方案--------------------
有这种事?还没用VS 2K10,关注
------解决方案--------------------
打补丁
------解决方案--------------------
在targetver.h或stdafx.h中把WINVER等4个常量宏的值改小一点就行了,
具体数值请参见:
http://msdn.microsoft.com/en-us/library/ms724832(v=VS.85).aspx
------解决方案--------------------
是不是缺少什么DLL了,编一个hello world的控制台程序试试。没用过2010纯猜测。
------解决方案--------------------
不懂,帮顶
------解决方案--------------------
是不是没带运行时一起发布?
先装VC10运行时
http://www.dtechgadget.com/visual-c-2010-runtime-redistributable-package-x86-x64-ia64-free-download/
------解决方案--------------------
友情up
------解决方案--------------------
看了一下targetver.h中有这样的注释:
#pragma once
// 包括 SDKDDKVer.h 将定义最高版本的可用 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>
------解决方案--------------------
还没有试过VS2010的路过。。。
------解决方案--------------------
是有这个问题,关注
------解决方案--------------------
1。 看一下EncodePointer等函数都在什么系统dll里,然后把这些DLL随版本发布
2。 打开编出来的EXE,从里面直接把导入函数EncodePointer等删除掉
------解决方案--------------------
只要能确定运行库没调用这些函数,修改生成执行文件的导出表,将此EncodePointer等函数删除应该可以。
或
一起发布带EncodePointer等函数的系统dll
实在不行就要求软件运行在xp sp2 以上系统吧。还好微软没要求vista以上系统,要不更郁闷。
------解决方案--------------------
EncodePointer 在 winxp sp2 上的 Kernel32.dll 才有,sp2 以前还真没法用
------解决方案--------------------
那你不用vs2010就可以了嘛,别人新的产品不可能永远都支持以前的旧的吧,
就象当年xp刚出来,也不是很多程序不兼容嘛,这么多年了,还是过了,没人用98了吧,难道你还需要编译win98上面的程序
------解决方案--------------------
http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx
再把vc9的cl.exe等换成vc10的应该可以,类似换intel编译器的方法
------解决方案--------------------
哈哈,微软牛,一句不再提供Win2K支持了事。
http://connect.microsoft.com/VisualStudio/feedback/details/473978/vs2010s-c-runtime-library-introduces-dependencies-which-prevent-execution-on-windows-2k
------解决方案--------------------
对微软来说,这当然是正确的,但微软的利益并不是你的利益,上面好像不少人的回复把微软的利益跟自己的利益混起来了。
------解决方案--------------------
试了一下,禁止连接运行库,编译出来的代码就可以在xp以下的系统运行。
默认的win32工程 稍作修改,依赖的函数如下
kernel32.dll
GetModuleHandleW
user32.dll
BeginPaint
CreateWindowExW
DefWindowProcW
DestroyWindow
DialogBoxParamW
DispatchMessageW
EndDialog
EndPaint
GetMessageW
LoadAcceleratorsW
LoadCursorW
LoadIconW
LoadStringW
PostQuitMessage
RegisterClassExW
ShowWindow
TranslateAcceleratorW
由于VS2010的运行库使用了EncodePointer等只有XP SP2以上的系统才支持的API,所以VS2010编译出来的程序无法在XP SP2以下的系统运行,不论是Win32程序还是MFC程序都不行,另试过如下方法,也都不行:
1、链接非DLL运行库(/MT、/MTd),不行
2、静态链接MFC,不行
3、定义WINVER、_WIN32_WINNT为0x0500,不行
请问有什么方法可以让VS2010编译出来的程序运行在XP SP2以下的系统,最好是简单的方法,诸如替换link.exe、.lib的方法就不用了。
------解决方案--------------------
有这种事?还没用VS 2K10,关注
------解决方案--------------------
打补丁
------解决方案--------------------
在targetver.h或stdafx.h中把WINVER等4个常量宏的值改小一点就行了,
具体数值请参见:
http://msdn.microsoft.com/en-us/library/ms724832(v=VS.85).aspx
------解决方案--------------------
是不是缺少什么DLL了,编一个hello world的控制台程序试试。没用过2010纯猜测。
------解决方案--------------------
不懂,帮顶
------解决方案--------------------
是不是没带运行时一起发布?
先装VC10运行时
http://www.dtechgadget.com/visual-c-2010-runtime-redistributable-package-x86-x64-ia64-free-download/
------解决方案--------------------
友情up
------解决方案--------------------
看了一下targetver.h中有这样的注释:
#pragma once
// 包括 SDKDDKVer.h 将定义最高版本的可用 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>
------解决方案--------------------
还没有试过VS2010的路过。。。
------解决方案--------------------
是有这个问题,关注
------解决方案--------------------
1。 看一下EncodePointer等函数都在什么系统dll里,然后把这些DLL随版本发布
2。 打开编出来的EXE,从里面直接把导入函数EncodePointer等删除掉
------解决方案--------------------
只要能确定运行库没调用这些函数,修改生成执行文件的导出表,将此EncodePointer等函数删除应该可以。
或
一起发布带EncodePointer等函数的系统dll
实在不行就要求软件运行在xp sp2 以上系统吧。还好微软没要求vista以上系统,要不更郁闷。
------解决方案--------------------
EncodePointer 在 winxp sp2 上的 Kernel32.dll 才有,sp2 以前还真没法用
------解决方案--------------------
那你不用vs2010就可以了嘛,别人新的产品不可能永远都支持以前的旧的吧,
就象当年xp刚出来,也不是很多程序不兼容嘛,这么多年了,还是过了,没人用98了吧,难道你还需要编译win98上面的程序
------解决方案--------------------
http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx
再把vc9的cl.exe等换成vc10的应该可以,类似换intel编译器的方法
------解决方案--------------------
哈哈,微软牛,一句不再提供Win2K支持了事。
http://connect.microsoft.com/VisualStudio/feedback/details/473978/vs2010s-c-runtime-library-introduces-dependencies-which-prevent-execution-on-windows-2k
------解决方案--------------------
对微软来说,这当然是正确的,但微软的利益并不是你的利益,上面好像不少人的回复把微软的利益跟自己的利益混起来了。
------解决方案--------------------
试了一下,禁止连接运行库,编译出来的代码就可以在xp以下的系统运行。
默认的win32工程 稍作修改,依赖的函数如下
kernel32.dll
GetModuleHandleW
user32.dll
BeginPaint
CreateWindowExW
DefWindowProcW
DestroyWindow
DialogBoxParamW
DispatchMessageW
EndDialog
EndPaint
GetMessageW
LoadAcceleratorsW
LoadCursorW
LoadIconW
LoadStringW
PostQuitMessage
RegisterClassExW
ShowWindow
TranslateAcceleratorW