📄 csdn_文档中心_microsoft windows 2000 应用程序兼容性.htm
字号:
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT
src="CSDN_文档中心_Microsoft Windows 2000 应用程序兼容性.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> Microsoft Windows 2000
应用程序兼容性</B> ghj1976(转贴) </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> Microsoft Windows 2000
应用程序兼容性</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp">http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<TABLE border=0 width=520>
<TBODY>
<TR>
<TD width=5><IMG height=28
src="CSDN_文档中心_Microsoft Windows 2000 应用程序兼容性.files/1ptrans.gif"
width=1></TD>
<TD vAlign=top>
<TABLE border=0 width="100%">
<TBODY>
<TR>
<TD width="50%"><BR></TD>
<TD width="50%"></TD></TR></TBODY></TABLE><SPAN class=90v><!-- content start -->
<P>
<H1><A name=win2000appcomp></A>Kyle Marsh<BR>Microsoft
Corporation</H1>
<P>1999 年 11 月</P>
<P><B>摘要:</B>讨论使应用程序在 Microsoft(R) Windows(R) 2000
上存在不兼容性的几个问题。其中有以下几部分:</P>
<P><A
href="http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp#win2000appcomp_topic1"><FONT
color=#660066>介绍</FONT></A><BR><A
href="http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp#win2000appcomp_topic2"><FONT
color=#660066>设置和安装问题</FONT></A><BR><A
href="http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp#win2000appcomp_topic3"><FONT
color=#660066>Windows 2000 兼容性问题</FONT></A><BR><A
href="http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp#win2000appcomp_topic4"><FONT
color=#660066>应用程序稳定性问题</FONT></A><BR><A
href="http://www.microsoft.com/china/msdn/library/techart/win2000appcomp.asp#win2000appcomp_topic5"><FONT
color=#660066>Windows 平台之间的差异</FONT></A></P>
<H2><A name=win2000appcomp_topic1></A>介绍</H2>
<P>几个月来,我一直从事一项任务,即找出 Windows 2000
操作系统中的应用程序兼容性问题。在这里我真正要讨论的是,造成应用程序与 Windows 2000
不兼容的原因。没有人真正关心使应用程序兼容的原因。</P>
<P>我一直在与 Windows 2000 测试组合作,他们在过去的几个月中已测试了数百个应用程序。我们已将应用程序在
Windows 2000 上正常或不正常运行的原因进行书面论述。我们发现的问题可以归为四类:
<UL type=disc>
<LI><B>无法在 Windows 2000 上安装的应用程序。</B> 这是迄今我们发现的最大问题。应用程序在
Windows 2000
上安装的方式并无甚特殊之处;问题是这些应用程序不让自己安装到这一新版本的操作系统中。<BR><BR>
<LI><B>我们对操作系统所做的、影响应用程序运行的更改。</B>每当 Microsoft Windows NT(R)
开发组面临选择,是使系统作为平台更稳定或更强大,还是保障应用程序的兼容性,他们总是牺牲后者而取稳定性。Windows
2000
开发工作的一个主要目标就是让系统作为平台更加稳定。遗憾的是,为了实现这一点而必须进行的某些改动,已导致应用程序在
Windows 2000 上不兼容。<BR><BR>
<LI><B>我们已对操作系统进行的更改不会影响应用程序的兼容性,但会中断某些应用程序。</B><BR><BR>
<LI><B>过于依赖 Windows 9x 平台的应用程序。</B>我们在开发 Windows 2000
时,考虑到有众多 Windows 9x 用户需要升级,因此对 Windows 9x 应用程序进行了测试,将它们移植到
Windows 2000 中。我们发现某些应用程序过于依赖 Windows 9x。 </LI></UL>
<H2><A name=win2000appcomp_topic2></A>设置和安装问题</H2>
<P>我们要讨论的第一类问题是设置和安装问题;最常见的问题无疑是无法在 Windows 2000
上安装应用程序。实际上,导致无法安装应用程序的一个最普遍的原因,在于 Windows 2000 是 Windows NT 的
5.0 版。</P>
<P>测试组以多种方式测试应用程序。他们将应用程序安装在基于 Windows 2000 的系统中,或者将应用程序安装在
Windows NT 4.0 或 Windows 95 中,然后再将系统升级到 Windows
2000,以便进行测试。</P>
<P>我们拿来一台未安装任何操作系统的机器后,安装上 Windows
2000,再安装应用程序,与上述升级的情况相比,前者的兼容性数目要少得多。</P>
<H3>版本检查</H3>
<P>造成应用程序无法安装在 Windows 2000
上的第一位原因,是它们无法正确处理版本号。我们发现很多应用程序都进行以下示例代码所做的操作。它们在运行过程中会调用
<B>GetVersionEX</B>,然后写下一条“if”语句,该语句规定:“如果系统是版本 3,因为没有新的
Shell,我不能正常运行,所以我可能无法安装。如果系统是版本 4,我可以进行安装和设置”。问题出在如果系统是版本
5,这一“if”语句就没有了下文。因为版本号是
5.0,这些应用程序由于自身原因而无法安装,所以我们发现了一系列这样那样的问题。</P><PRE><CODE>if (osvi.dwMajorVersion == 3)
{
// 请这样做
}
else if (osvi.dwMajorVersion == 4)
{
// 请那样做
}
</CODE></PRE>
<P>测试组继续寻找解决方案,并蒙蔽了许多此类应用程序。在早期的编译中,我们能够采取措施改变
<B>GetVersionEx</B> 的返回值。我们可以改变其返回值,欺骗应用程序,告诉它版本号就是
4.0,然后程序就能够继续安装,并正常运行。但有部分应用程序的设计思想就是不能安装在 Windows 2000
上。对于病毒扫描程序或其他低级实用程序来说,受限于某一操作系统版本是可以理解的。不过,这些应用程序会显示消息来说明这一点。我们查找的是那些不能安装或无法正常运行、又根本没有通知用户的应用程序。</P>
<P>怎样才能正确地检查版本号?在 Windows 2000 中我们将添加一个新的 API:
<B>VerifyVersionInfo</B>,这一 API
在运行时将依次检查主版本号、次版本号以及服务包。如果出现了操作系统的新版本,应用程序仍然能够在其上安装并运行。实际上应用
<B>VerifyVersionInfo</B>
的选项和方式还有很多,但如果只是检查“要是操作系统升级了,应用程序该如何处理”这一类问题,您只需调用这三个标志,然后检查主版本号、次版本号以及服务包。您能够定义以下语句:“我的程序需要运行在
Windows NT 4.0、SP2 上”,然后询问
<B>VerifyVersionInfo</B>“我正在运行的操作系统是否已达到这一标准?”,该 API
将返回真值或假值。</P><PRE><CODE>VerifyVersionInfo(&osvi,
VER_MAJORVERSION |
VER_MINORVERSION |
VER_SERVICEPACKMAJOR,
dwlConditionMask);
</CODE></PRE>
<P>采用这一方式检查版本,就可以符合 Windows 2000
应用程序的规范,其基本思想是“只要存在新版本的操作系统,就要在新版本上进行安装。”</P>
<P>应用 <B>VerifyVersionInfo</B> 的一个问题是目前该 API 只能在 Windows 2000
平台上运行。为了检查 Windows 95
等旧平台的版本,您必须应用<B>GetVersionEx</B>。查看以下示例代码,即可发现它的功能与
<B>VerifyVersionInfo</B> 基本相同:依次检查主版本号、次版本号以及服务包。</P><PRE><CODE>BOOL bIsWindowsVersionOK(DWORD dwMajor, DWORD dwMinor, DWORD dwSPMajor )
{
OSVERSIONINFO osvi;
// 初始化 OSVERSIONINFO 结构
//
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx((OSVERSIONINFO*)&osvi);
// 首先,主版本
if ( osvi.dwMajorVersion > dwMajor )
return TRUE;
else if ( osvi.dwMajorVersion == dwMajor )
{
// 然后,次版本
if (osvi.dwMinorVersion > dwMinor )
return TRUE;
else if (osvi.dwMinorVersion == dwMinor )
{
// 对,最好检查一下 Service Pack
if ( dwSPMajor && osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
{
HKEY hKey;
DWORD dwCSDVersion;
DWORD dwSize;
BOOL fMeetsSPRequirement = FALSE;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Control\\Windows", 0,
KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -