如何得到Windows操作系统版本信息(包括2003 R2、Vista和Windows 2008 Server)

Server 2008使用Windows Error Reporting保存Crash Dump 在Windows Server做性能测试的同学都会有这样的经历,发现W3WP或者其他相关程序crash以后,开发的第一反应经常是:“有没有 crash dump?我需要看这个来调查问题。” 在Server 2003中我们总是要借助于第三方工具来抓取Crash Dump,不仅很麻烦而且会影响系统的性能,因此在产品环境中用起来也就更加谨慎。 好的一点是,自从Windows2008/Windows V 阅读详情
    在程序中判断Windows版本这本应该是一个极其简单的API就能完成的工作,但由于微软的失误,使得Windows操作系统家族的版本正变得混乱不堪,一个最新的例子是Windows Vista和Windows 2008 Server的版本均为6.0。上世纪90年代Windows 9x和Windows NT的版本混乱主要是因为程序员的错误(或失误)导致的,那么这一次的版本混乱又是因为什么导致的?如果是某些人为的决定导致这样的结果,我只能说这个决定是极其愚蠢的,因为这个愚蠢的决定已经导致版本的意义完全失去了。
    废话不多说了,直接贴代码,以下代码可在Vs2005/Vs2008下编译通过。


#include 
"stdafx.h"
#include 
<windows.h>
#include 
<tchar.h>
#include 
<stdio.h>

#ifndef WSTR
#define WSTR(x) L##x
#endif 

#ifndef SM_SERVERR2
#define SM_SERVERR2 89
#endif 

// 前置声明
WCHAR* GetOperationSystemInfoOld( WCHAR* szBuffer,size_t szLength);

// GetNativeSystemInfo函数原型(WOW64) (XP,Vista,2003,2008)
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO lpSystemInfo);

// GetProductInfo函数原型(Vista/2008)
typedef BOOL (WINAPI *PGPI)(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType);

// ProductType常量
#define PRODUCT_UNDEFINED                            0x00000000    // An unknown product
#define PRODUCT_ULTIMATE                            0x00000001    // Ultimate Edition
#define PRODUCT_HOME_BASIC                            0x00000002    // Home Basic Edition
#define PRODUCT_HOME_PREMIUM                        0x00000003    // Home Premium Edition
#define PRODUCT_ENTERPRISE                            0x00000004    // Enterprise Edition
#define PRODUCT_HOME_BASIC_N                        0x00000005    // Home Basic Edition
#define PRODUCT_BUSINESS                            0x00000006    // Business Edition
#define PRODUCT_STANDARD_SERVER                        0x00000007    // Server Standard Edition (full installation)
#define PRODUCT_DATACENTER_SERVER                    0x00000008    // Server Datacenter Edition (full installation)
#define PRODUCT_SMALLBUSINESS_SERVER                0x00000009    // Small Business Server
#define PRODUCT_ENTERPRISE_SERVER                    0x0000000A    // Server Enterprise Edition (full installation)
#define PRODUCT_STARTER                                0x0000000B    // Starter Edition
#define PRODUCT_DATACENTER_SERVER_CORE                0x0000000C    // Server Datacenter Edition (core installation)
#define PRODUCT_STANDARD_SERVER_CORE                0x0000000D    // Server Standard Edition (core installation)
#define PRODUCT_ENTERPRISE_SERVER_CORE                0x0000000E    // Server Enterprise Edition (core installation)
#define PRODUCT_ENTERPRISE_SERVER_IA64                0x0000000F    // Server Enterprise Edition for Itanium-based Systems
#define PRODUCT_BUSINESS_N                            0x00000010    // Business Edition
#define PRODUCT_WEB_SERVER                            0x00000011    // Web Server Edition (full installation)
#define PRODUCT_CLUSTER_SERVER                        0x00000012    // Cluster Server Edition
#define PRODUCT_HOME_SERVER                            0x00000013    // Home Server Edition
#define PRODUCT_STORAGE_EXPRESS_SERVER                0x00000014    // Storage Server Express Edition
#define PRODUCT_STORAGE_STANDARD_SERVER                0x00000015    // Storage Server Standard Edition
#define PRODUCT_STORAGE_WORKGROUP_SERVER            0x00000016    // Storage Server Workgroup Edition
#define PRODUCT_STORAGE_ENTERPRISE_SERVER            0x00000017    // Storage Server Enterprise Edition
#define PRODUCT_SERVER_FOR_SMALLBUSINESS            0x00000018    // Server for Small Business Edition
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM        0x00000019    // Small Business Server Premium Edition
#define PRODUCT_HOME_PREMIUM_N                        0x0000001A    // Home Premium Edition
#define PRODUCT_ENTERPRISE_N                        0x0000001B    // Enterprise Edition
#define PRODUCT_ULTIMATE_N                            0x0000001C    // Ultimate Edition
#define PRODUCT_WEB_SERVER_CORE                        0x0000001D    // Web Server Edition (core installation)
#define PRODUCT_UNLICENSED                            0xABCDABCD    // Unlicensed edition


/// <summary> 
///        获得操作系统的信息(2000以前)。
/// </summary> 
/// <param name="szBuffer">
///        用于保存信息的缓冲区(必须足够大)。
/// </param>
/// <returns>
///        返回操作系统信息。
/// </returns>
WCHAR* GetOperationSystemInfoOld( WCHAR* szBuffer,size_t szLength)
{
    
// 获得操作系统版本信息
    OSVERSIONINFOW osvi            = { 0 };
    osvi.dwOSVersionInfoSize    
= sizeof( OSVERSIONINFOW );
    
if( !GetVersionExW( &osvi ) )
    {
        szBuffer[
0] = WSTR( '' );
        
return szBuffer;
    }
    LPWSTR pszTemp            
= szBuffer;
    size_t szTempLen        
= szLength;
    
int    iLength            = 0;

    
// Windows Me, Windows 98, or Windows 95
    if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
    {
        
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion < 10 )
        {
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows 95 ") );
            szTempLen 
-= iLength;
            pszTemp 
+= iLength;
            
if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
            {
                iLength 
= swprintf( pszTemp,szTempLen, WSTR("OSR2 ") );
                szTempLen 
-= iLength;
                pszTemp 
+= iLength;
            }
        } 
        
else  if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
        {
            iLength 
= swprintf ( pszTemp,szTempLen,  WSTR("Microsoft Windows 98 ") );
            szTempLen 
-= iLength;
            pszTemp 
+= iLength;

            
if ( osvi.szCSDVersion[1] == 'A' )
            {
                iLength 
= swprintf( pszTemp,szTempLen, WSTR("SE ") );
                szTempLen 
-= iLength;
                pszTemp 
+= iLength;
            }
        } 
        
else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
        {
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows Millennium Edition ") );
            szTempLen 
-= iLength;
            pszTemp 
+= iLength;
        } 
    }
    
else if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
    {
        
if ( osvi.dwMajorVersion <= 4 )
        {
            iLength 
= swprintf( pszTemp,szTempLen, WSTR("Microsoft Windows NT"));
            szTempLen 
-= iLength;
            pszTemp 
+= iLength;


            
// 从注册表获取更详细信息
            HKEY  hKey = NULL;
            WCHAR szProductType[
256] = { 0 };
            DWORD dwBufLen 
= 256*sizeof(WCHAR);
            RegOpenKeyExW( HKEY_LOCAL_MACHINE, WSTR(
"SYSTEM/CurrentControlSet/Control/ProductOptions"), 0, KEY_QUERY_VALUE, &hKey );
            RegQueryValueExW( hKey, WSTR(
"ProductType"), NULL, NULL,(LPBYTE) szProductType, &dwBufLen);
            RegCloseKey( hKey );

            iLength 
= 0;
            
if ( lstrcmpiW( WSTR("WINNT"), szProductType) == 0 )
                iLength 
= swprintf( pszTemp,szTempLen, WSTR("Professional ") );
            
else if ( lstrcmpiW( WSTR("LANMANNT"), szProductType) == 0 )
                iLength 
= swprintf( pszTemp,szTempLen, WSTR("Server ") );
            
else if( lstrcmpiW( WSTR("SERVERNT"), szProductType) == 0 )
                iLength 
= swprintf( pszTemp,szTempLen, WSTR("Advanced Server ") );

            szTempLen 
-= iLength;
            pszTemp 
+= iLength;

            
// 获取补丁包信息
            iLength = swprintf ( pszTemp,szTempLen, WSTR("version %d.%d %s (Build %d)"),
                osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.szCSDVersion,osvi.dwBuildNumber 
& 0xFFFF);
            szTempLen 
-= iLength;
            pszTemp 
+= iLength;
        }
    }

    
// 未知系统
    if( pszTemp == szBuffer )
    {
        iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows Unknown Edition,%s (%d.%d build %d)"),osvi.szCSDVersion,osvi.dwMajorVersion,osvi.dwMajorVersion,osvi.dwBuildNumber);
        szTempLen 
-= iLength;
        pszTemp 
+= iLength;
    }

    
return szBuffer;
}


/// <summary> 
///        获得操作系统的信息。
/// </summary> 
/// <param name="szBuffer">
///        用于保存信息的缓冲区(必须足够大)。
/// </param>
/// <returns>
///        返回操作系统信息。
/// </returns>
WCHAR* GetOperationSystemInfo( WCHAR* szBuffer,size_t szLength)
{
    OSVERSIONINFOEXW osvi    
= {  0 };
    SYSTEM_INFO        si        
= { 0  };
    LPWSTR pszTemp            
= szBuffer;
    size_t szTempLen        
= szLength;
    
int    iLength            = 0;
    
if( szBuffer == NULL || szLength == 0 ) return szBuffer;

    
// 首先尝试使用OSVERSIONINFOEX结构(Windows 2000及以上支持)
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
    
if( !GetVersionExW ((OSVERSIONINFOW *) &osvi) )
    {
        
// 使用OSVERSIONINFO(Windows95以上支持)
        return GetOperationSystemInfoOld( szBuffer,szLength );
    }

    
// 获得系统信息
    PGNSI pGetNativeSystemInfo = (PGNSI) GetProcAddress( GetModuleHandleW(WSTR("kernel32.dll")), "GetNativeSystemInfo");
    
if( pGetNativeSystemInfo != NULL )
        (
*pGetNativeSystemInfo)( &si );
    
else
        GetSystemInfo(
&si);

    
// 检查操作系统的版本信息
    if( osvi.dwPlatformId != VER_PLATFORM_WIN32_NT )
    {
        iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows Unknown Edition,%s (%d.%d build %d)"),osvi.szCSDVersion,osvi.dwMajorVersion,osvi.dwMajorVersion,osvi.dwBuildNumber);
        szTempLen 
-= iLength;
        pszTemp 
+= iLength;
        
return szBuffer;
    }

    
// ASSERT( osvi.dwMajorVersion > 4 );
    if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) // 5.0 Windows 2000
    {
        iLength        
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows 2000 ") );
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;

        
// 详细版本信息
        if ( osvi.wProductType == VER_NT_WORKSTATION )
        {
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Professional ") );
        }
        
else
        {
            
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                iLength 
= swprintf ( pszTemp,szTempLen,WSTR( "Datacenter Server" ));
            
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                iLength 
= swprintf ( pszTemp,szTempLen,WSTR( "Advanced Server" )) ;
            
else
                iLength 
= swprintf ( pszTemp,szTempLen,WSTR( "Server" ));
        }
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;
    }
    
else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) // 5.1 XP
    {
        iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows XP ") );
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;

        
// 详细版本信息
        if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Home Edition" ));
        
else 
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Professional" ));
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;
    }
    
else if( osvi.dwMajorVersion == 5 &&osvi.dwMinorVersion == 2 ) // 5.2 2003
    {
        
if( GetSystemMetrics(SM_SERVERR2) )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Windows Server 2003 R2 "));
        
else if ( osvi.wSuiteMask==VER_SUITE_STORAGE_SERVER )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Windows Storage Server 2003 "));
        
else if( osvi.wProductType == VER_NT_WORKSTATION &&    si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Windows XP Professional x64 Edition"));
        
else 
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Windows Server 2003 "));
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;

        
// 详细版本信息
        iLength = 0;
        
if ( osvi.wProductType != VER_NT_WORKSTATION )
        {
            
if ( si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
            {
                
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Datacenter Edition for Itanium-based Systems" ));
                
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Enterprise Edition for Itanium-based Systems" ));
            }
            
else if ( si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 )
            {
                
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Datacenter x64 Edition" ));
                
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Enterprise x64 Edition" ));
                
else 
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Standard x64 Edition" ));
            }
            
else
            {
                
if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Compute Cluster Edition" ));
                
else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Datacenter Edition" ));
                
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Enterprise Edition" ));
                
else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Web Edition" ));
                
else 
                    iLength 
= swprintf ( pszTemp,szTempLen, WSTR( "Standard Edition" ));
            }
        }
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;
    }
    
else if( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) // 6.0 vista and 2008
    {
        
if( osvi.wProductType == VER_NT_WORKSTATION )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Windows Vista "));
        
else 
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Windows Server 2008 " ));
        szTempLen    
-= iLength;
        pszTemp        
+= iLength;

        
// 获得GetProductInfo函数原型
        PGPI   pGetProductInfo  = NULL;
        pGetProductInfo 
= (PGPI) GetProcAddress( GetModuleHandleW(WSTR("kernel32.dll")), "GetProductInfo");
        
if( pGetProductInfo != NULL )
        {
            DWORD dwProductType 
= 0;
            (
*pGetProductInfo)( 6,0,0,0,&dwProductType);
            
switch( dwProductType )
            {
            
case PRODUCT_ULTIMATE:
            
case PRODUCT_ULTIMATE_N:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Ultimate Edition" ));
                
break;
            
case PRODUCT_HOME_PREMIUM:
            
case PRODUCT_HOME_PREMIUM_N:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Home Premium Edition" ));
                
break;
            
case PRODUCT_HOME_BASIC:
            
case PRODUCT_HOME_BASIC_N:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Home Basic Edition" ));
                
break;
            
case PRODUCT_HOME_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Home Server Edition" ));
                
break;
            
case PRODUCT_ENTERPRISE:
            
case PRODUCT_ENTERPRISE_N:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Enterprise Edition" ));
                
break;
            
case PRODUCT_BUSINESS:
            
case PRODUCT_BUSINESS_N:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Business Edition" ));
                
break;
            
case PRODUCT_STARTER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Starter Edition" ));
                
break;
            
case PRODUCT_CLUSTER_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Cluster Server Edition" ));
                
break;
            
case PRODUCT_DATACENTER_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Datacenter Edition" ));
                
break;
            
case PRODUCT_DATACENTER_SERVER_CORE:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Datacenter Edition (core installation)" ));
                
break;
            
case PRODUCT_ENTERPRISE_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Enterprise Edition" ));
                
break;
            
case PRODUCT_ENTERPRISE_SERVER_CORE:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Enterprise Edition (core installation)" ));
                
break;
            
case PRODUCT_ENTERPRISE_SERVER_IA64:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Enterprise Edition for Itanium-based Systems" ));
                
break;
            
case PRODUCT_SMALLBUSINESS_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Small Business Server" ));
                
break;
            
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Small Business Server Premium Edition" ));
                
break;
            
case  PRODUCT_SERVER_FOR_SMALLBUSINESS:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Server for Small Business Edition" ));
                
break;
            
case PRODUCT_STANDARD_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Standard Edition" ));
                
break;
            
case PRODUCT_STANDARD_SERVER_CORE:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Standard Edition (core installation)" ));
                
break;
            
case PRODUCT_WEB_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Web Server Edition" ));
                
break;
            
case PRODUCT_WEB_SERVER_CORE:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Web Server Edition (core installation)" ));
                
break;
            
case PRODUCT_STORAGE_ENTERPRISE_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Storage Server Enterprise Edition" ));
                
break;
            
case PRODUCT_STORAGE_EXPRESS_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Storage Server Express Edition" ));
                
break;
            
case PRODUCT_STORAGE_STANDARD_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Storage Server Standard Edition" ));
                
break;
            
case PRODUCT_STORAGE_WORKGROUP_SERVER:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Storage Server Workgroup Edition" ));
                
break;
            
case PRODUCT_UNLICENSED:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Unlicensed Edition" ));
                
break;
            
default:
                iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Unknown Edition" ));
                
break;
            }
            szTempLen 
-= iLength;
            pszTemp 
+= iLength;
        }

        
// 详细版本信息
        iLength = 0;
        
if ( si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR( ", 64-bit" ));
        
else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL )
            iLength 
= swprintf ( pszTemp,szTempLen, WSTR(", 32-bit"));
        szTempLen 
-= iLength;
        pszTemp 
+= iLength;
    }
    
else
    {
        iLength 
= swprintf ( pszTemp,szTempLen, WSTR("Microsoft Windows Unknown Edition,%s (%d.%d build %d)"),osvi.szCSDVersion,osvi.dwMajorVersion,osvi.dwMajorVersion,osvi.dwBuildNumber);
        szTempLen 
-= iLength;
        pszTemp 
+= iLength;
        
return szBuffer;
    }


    
// 补丁包和创建版本
    iLength = swprintf ( pszTemp,szTempLen, WSTR(", %s (Build %d)"), osvi.szCSDVersion,osvi.dwBuildNumber);
    szTempLen 
-= iLength;
    pszTemp 
+= iLength;

    
// 返回信息
    return szBuffer;
}


int _tmain(int argc, _TCHAR* argv[])
{
    WCHAR szInfo[
1024] = {  0 };
    wprintf(L
"%s ",GetOperationSystemInfo( szInfo,1024 ));
    
return 0;

}

    以上程序在我的机器上运行结果为:Windows Server 2003 Enterprise Edition, Service Pack 2 (Build 3790)。因为没有条件在所有的操作系统上进行测试,有条件的朋友可以帮忙测试一下,看看有什么错误和疏漏没有。
    为了方便大家,将整理的Windows版本变迁历史也列出来(如有错误,还请指正):

Windows版本变迁
Windows产品MajorMinorPlatformIDBuildNumber(n)
Windows 95401(VER_PLATFORM_WIN32_WINDOWS)950
Windows 95 SP1401950 <n<=1080
Windows 95 OSR24<101>1080
Windows 9841011998
Windows 98 SP141011998<n<2183
Windows 98 SE4101>=2183
Windows Me49013000
Windows NT 3.513512(VER_PLATFORM_WIN32_NT)1057
Windows NT 4.04021381
Windows 20005022195
Windows XP5122600
Windows 20035223790(?)
Windows Vista602 
Windows 2008 602 
Windows CE 1.0103 
Windows CE 2.0203 
Windows CE 2.1213 
Windows CE 3.030 3 
Windows FutureXYZ 
编程工具cfc7.1 [Info] Name=INTL Version=1.00.000 DiskSpace=8000 ;DiskSpace requirement in KB [Startup] CmdLine= SuppressWrongOS=Y ScriptDriven=2 ScriptVer=15.0.0.498 DotNetOptionalInstallIfSilent=N OnUpgrade=0 RequireExactLangMatch=0404,0804 RTLLangs=0401,040d Product=SIMATIC CFC PackageName=Setup.msi EnableLangDlg=Y LogResults=N DoMaintenance=N ProductCode={5784DE5F-8F40-45A4-90D3-1E03B387997C} ProductVersion=07.01.0100 LauncherName=setup.exe PackageCode={C53F8AAB-B0E9-4C02-8734-C7E075939022} [MsiVersion] 2.0.2600.0=SupportOS [SupportOSMsi11] ;Supported platforms for MSI 1.1 Win95=1 Win98=1 WinNT4SP3=1 [SupportOSMsi12] ;Supported platforms for MSI 1.2 Win95=1 Win98=1 WinME=1 WinNT4SP3=1 [SupportOS] ;Supported platforms for MSI 2.0 Win95=1 Win98=1 WinME=1 WinNT4SP6=1 Win2K=1 [SupportOSMsi30] ;Supported platforms for MSI 3.0 Win2KSP3=1 WinXP=1 Win2003Server=1 [Win95] MajorVer=4 MinorVer=0 MinorVerMax=1 BuildNo=950 PlatformId=1 [Win98] MajorVer=4 MinorVer=10 MinorVerMax=11 BuildNo=1998 PlatformId=1 [WinME] MajorVer=4 MinorVer=90 MinorVerMax=91 BuildNo=3000 PlatformId=1 [WinNT4SP3] MajorVer=4 MinorVer=0 MinorVerMax=1 BuildNo=1381 PlatformId=2 ServicePack=768 [WinNT4SP6] MajorVer=4 MinorVer=0 MinorVerMax=1 BuildNo=1381 PlatformId=2 ServicePack=1536 [Win2K] MajorVer=5 MinorVer=0 MinorVerMax=1 BuildNo=2195 PlatformId=2 [Win2KSP3] MajorVer=5 MinorVer=0 MinorVerMax=1 BuildNo=2195 PlatformId=2 ServicePack=768 [WinXP] MajorVer=5 MinorVer=1 MinorVerMax=2 BuildNo=2600 PlatformId=2 [Win2003Server] MajorVer=5 MinorVer=2 MinorVerMax=3 BuildNo=2600 PlatformId=2 [0x0409] TITLE=Choose Setup Language DESCRIPTION=Select the language for this installation from the choices below. OK=OK Cancel=Cancel 0x0409=English (United States) 0x0411=Japanese 0x0401=Arabic (Saudi Arabia) 0x042d=Basque 0x0402=Bulgarian 0x0403=Catalan 0x0804=Chinese (PRC) 0x0404=Chinese (Taiwan) 0x041a=Croatian 0x0405=Czech 0x0406=Danish 0x0413=Dutch (Netherlands) 0x040b=Finnish 0x0c0c=French (Canada) 0x040c=French (France) 0x0407=German (Germany) 0x0408=Greek 0x040d=Hebrew 0x040e=Hungarian 0x0421=Indonesian 0x0410=Italian (Italy) 0x0412=Korean 0x0414=Norwegian (Bokmal) 0x0415=Polish 0x0416=Portuguese (Brazil) 0x0816=Portuguese (Portugal) 0x0418=Romanian 0x0419=Russian 0x0c1a=Serbian (Cyrillic) 0x041b=Slovak 0x0424=Slovenian 0x040a=Spanish (Traditional Sort) 0x041d=Swedish 0x041e=Thai 0x041f=Turkish [Languages] count=5 default=409 key0=40a key1=40c key2=410 key3=407 key4=409 [Setup.msi] Type=0 Location=Setup.msi [Setup.bmp] 0=Setup.bmp Type=0 立即下载

相关推荐

使用windows update API 获取补丁更新情况列表

使用windows update API 获取补丁更新情况列表,包括已安装和未安装补丁列表,API可参考msdn。直接编译即可运行。 注:运行需要联网,否则获取不到补丁信息。

Windows XP/Server2003查看系统版本

Windows XP/Server2003查看系统版本 在开始运行处输入winmsd.exe 转载于:https://blog.51cto.com/mervin/504531

weixin_34227447的博客 768

批处理获取系统版本及位数

通过批处理获取系统版本及位数,可获取Win95、Win98、Winme、WinNT35、Win2000、WinXP、Win2003、WinVista、Win7、Win8、Win10等,代码简洁,方便修改

得到各系统的所有文件02

public void browseServerFile(EsbBarDo Do, String browseFolderName) { // 校验当前系统类型,设置根目录 getOperationSystemInfo(Do); // 设置当前父目录 Do.setCurrentParentPath(Do.getCurr...

爱的思念 144

Cadence OrCAD: 层次化设计 Hierarchical Design

详细介绍OrCAD的原理图层次化设计方法。

Fantasy237的博客 1万+

星载SAR系统参数设计过程自动化方法研究

 本文提出了一种 SAR系统参数自动化设计的 方法。首先,针对部分参数仍需手工选取的现状 建立了最优化求解模型,并给出了 PRF 和波位位 置的优化选取结果,使参数设计流程更加高效便 捷。然后,针对 SAR 系统参数设计过程中部分技 术指标的评测结果不满足用户需求时无法自动调 节的现状,采用 PID 控制器对方位向天线尺寸、信 号带宽、PRF 等参数进行自动调节,使得方位分辨 率、距离分辨率、方位模糊比等技术指标向用户需 求值逐步靠近。通过仿真实验验证了该方法的可 行性,实现了SAR系统参数设计过程的自动化

qq_43416206的博客 1522

获取windows操作系统名称和版本

// GetSystemName.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #pragma comment(lib, "netapi32.lib") #define REG_K_OS_W L"SOFTWARE\\Microsoft\\Windows NT\\Cur

yu_sn0w的博客 2702

nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集

本文详细介绍了nnU-Net v2在医学影像分割中的实战应用,从环境配置到自定义数据集训练的全流程。重点讲解了Python 3.9+环境搭建、PyTorch安装技巧、医学影像数据预处理规范,以及五折交叉验证训练方法,帮助开发者快速掌握这一先进的医学影像分析工具。

weixin_28718487的博客 352

【转】如何得到Windows操作系统版本信息(包括2003 R2、Vista和Windows 2008 Server)

在程序中判断Windows版本这本应该是一个极其简单的API就能完成的工作,但由于微软的失误,使得Windows操作系统家族的版本正变得混乱不堪,一个最新的例子是Windows Vista和Windows 2008 Server的版本均为6.0。上世纪90年代Windows 9x和Windows NT的版本混乱主要是因为程序员的错误(或失误)导致的,那么这一次的版本混乱又是因为什么导致的?

柴门的编程学习基地 1239

RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU等)

本文记录的是改进RT-DETR的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1922

6、Cocos2D游戏开发:精灵添加与角色实现

本文详细介绍了在Cocos2D游戏开发中如何添加背景精灵和玩家角色精灵。通过创建GameScene场景、组织项目资源、使用多分辨率图像适配不同设备,并深入讲解了将角色拆分为上下半身以实现更真实瞄准效果的原理。文章还解析了Cocos2D的图像搜索机制、锚点概念及其应用,以及如何通过父子节点关系管理复合角色。最终实现了猎人角色在场景中的正确显示与定位,为后续动画和交互功能打下基础。

e3f4g5的博客 90

Windows Server 2008 R2域控组策略设置禁用USB

转载:https://www.cnblogs.com/zoulongbin/p/6103296.html 问题:   Windows Server 2008 R2域控服务器如何禁用客户端使用USB移动存储(客户端操作系统需要 Windows Vista以上的操作系统,XP以下的操作系统不能禁用USB移动存储)。    标注:对于Windows Server 2008 R2域控组策略禁用USB移动存储设备要求是客户端操作系统要求Windows Vista以上,针对 XP以下的操作系统则只能使用Wi

weixin_38232096的博客 2494

【华为OD机考真题】- 斗地主之顺子(B卷-200分)(Java版)

🔔本文收录于「最新最全华为OD机试真题(Java版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新

**My Coding Family** 815

推荐下载:Windows Server 2008 SP2简体中文版ISO下载

Windows Server 2008是微软公司新一代服务器操作系统,时隔5年了,变化肯定不是一般的大,下载之前我们先来看一下Windows Server 2008 SP2具有哪些新功能特点吧(天缘整理概要)。 1、Windows Server 2008主体内核与VISTA SP1相同,相比2003在体系结构、新特性以及管理等方面都做了大量的修改; ...

weixin_33850015的博客 4108

Claude Code 100个真实案例 - 用AI设计Arduino PCB电路板(硬件小白也能画板)

本案例展示如何使用 Claude Code 配合 KiCad 的 Python 脚本接口,从零设计一块 Arduino 传感器扩展板 PCB。从原理图符号创建、网表生成到 PCB 布局布线,全程自动化完成,最终输出可直接发给工厂打样的 Gerber 文件。

yueyeguzhuo的专栏 437

基于PyQt5和OpenCV的传统图像分割应用UI程序

主要功能包括:加载和显示图像应用多种图像分割算法调整算法参数保存处理结果。

Henry的博客 471

windows 2008和windows 2008 r2有什么区别

http://gnaw0725.blogbus.com/logs/50846175.html

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 8835

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

delphi获取windows系统版本信息,大全,准确

很多时候从网上找到的取操作系统版本的代码都不是很准确,有些信息也不全面。为此,在msdn上找到全面的信息整理成代码,共享! unit WindowsSysVersion; interface uses   windows  ; {$IFDEF CONDITIONALEXPRESSIONS} {$IF Defined(TOSVersionInfoEx)} {$DEFINE TOSVER

找个地方放一下 2958

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

笔记本装系服务器系统驱动,联想昭阳E4430A笔记本安装WINDOWS SERVER 2003 2008服务器版网卡驱动的问题...

联想昭阳E4430A笔记本安装WINDOWS SERVER 2003 2008服务器版网卡驱动的问题作者:随然 日期:2014-04-30字体大小: 小 中 大 今年1月份的时候单位发了一台笔记本,单位写的配置的大概要求,由ZF拍板和采购的联想E4430A。电脑的配置是定制的,虽然电脑上写的型号是E4430A,但比联想官方的E4430A笔记本的配置要低一些。真心觉得招标来买东西太没意思了,没觉得买...

weixin_39712724的博客 992

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

windows server 2008 R2 安装

微软服务器操作系统大致有: server 2000(简称2K),还有server 2003(2K3),server 2008(2K8),server 2000和2003是基于NT内核的,而2008是基于VISTA,支持powershell。 Windows Server 2008 R2服务器操作系统,提升了虚拟化、系统管理弹性、网络存取方式,以及信息安全等领域的应用,Windows Server ...

weixin_33913377的博客 690

引用-把Windows Server 2008 降级成Vista使用

虽然微软官方宣称Windows Server 2008和Vista系统是同一核心,但是,根据各方的评测,Windows Server 2008确实比Windows Vista运行速度要快15%以上,而且更稳定。曾经有人戏言,没看到Windows Server 2008刚出来的时候,版本信息就是SP1么。  既然Windows Server 2008更好,那我们无妨把它作为个人版操作系统,这样的话,...

weixin_30486037的博客 279
上一篇: Visual Studio 2008迁移及试用手记
下一篇: 如何在32位程序中突破地址空间限制使用超过4G的内存
jackjoy
博客等级 码龄22年 24粉丝 28原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值