⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_microsoft windows 2000 应用程序兼容性.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<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>&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;Microsoft Windows 2000 
            应用程序兼容性</B>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;<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(&amp;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(&amp;osvi, sizeof(OSVERSIONINFO));
   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
   GetVersionEx((OSVERSIONINFO*)&amp;osvi);
   // 首先,主版本
   if ( osvi.dwMajorVersion &gt; dwMajor )
      return TRUE;
   else if ( osvi.dwMajorVersion == dwMajor )
      {
      // 然后,次版本
      if (osvi.dwMinorVersion &gt; dwMinor )
         return TRUE;
      else if (osvi.dwMinorVersion == dwMinor )
         {
         // 对,最好检查一下 Service Pack
         if ( dwSPMajor &amp;&amp; osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
            {
            HKEY   hKey;
            DWORD   dwCSDVersion;
             DWORD   dwSize;
            BOOL   fMeetsSPRequirement = FALSE;
&nbsp;
            if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                         "System\\CurrentControlSet\\Control\\Windows", 0, 
                         KEY_QUERY_VALUE, &amp;hKey) == ERROR_SUCCESS)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -