본문 바로가기

Windows

[Windows] Visual C++에서 운영 체제 서비스 팩 수준을 확인하는 방법

원문 URL : http://support.microsoft.com/kb/307393/ko


운영 체제(OS) 정보를 얻기 위해 제공되는 OSVersion 속성은 서비스 팩 정보를 멤버를 포함하지 않습니다. 어떤 서비스 팩이 설치되어 있는지 확인하려면 GetVersionEx API 함수를 직접 호출해야 합니다. 일반적으로 이 연습 방지하려면 좋습니다; .NET Framework 기본 API 집합 더욱 일관성 및 사용하기 쉬운) 액세스를 제공하는 것보다 방식으로 개별 API 함수를 호출하여.

API 함수를 직접 호출할 때 .NET Framework의 Interop 계층을 통해 이렇게 할 수 있습니다. 이 문서의 예제 코드에서는 서비스 팩 수준을 반환하는 GetServicePack, 메서드를 제공합니다.

참고: 고정 길이 문자열, szCSDVersion, OSVERSIONINFO 구조체를 포함합니다. 고정 길이 문자열은 더 이상 지원되지 않으므로 이 멤버에 대한 마샬링 정보를 제공해야 합니다. ([NULL]로 표시된) 특성을 사용하여 이를 멤버 이름 앞에.
  1. 새 .NET 관리되는 C++ 응용 프로그램을 엽니다.

    참고새 프로젝트 대화 상자의 Visual C++ 프로젝트프로젝트 형식 누른 다음 Managed C++ 응용 프로그램 Visual Studio .NET 2002, 콘솔 응용 프로그램 (.NET) Visual Studio .NET 2003 또는 CLR 콘솔 응용 프로그램템플릿 에서 Visual Studio 2005에 대한.
  2. 코드 창을 열고 Project Name.cpp, 다음 코드를 모두 삭제합니다.
  3. 다음 예제 코드를 붙여:
    #include "stdafx.h"

    #using <mscorlib.dll>

    using namespace System;
    using namespace System::Runtime::InteropServices;
    String *GetServicePack(void);

    [StructLayout(StructLayoutKind::Sequential)]
    __value struct OSVERSIONINFO
    {
    public:
    unsigned long dwOSVersionInfoSize;
    unsigned long dwMajorVersion;
    unsigned long dwMinorVersion;
    unsigned long dwBuildNumber;
    unsigned long dwPlatformId;
    [MarshalAs(UnmanagedType::ByValTStr, SizeConst=128)]
    String* szCSDVersion;
    };

    [DllImport("kernel32.dll", EntryPoint="GetVersionEx", SetLastError=true,
    CallingConvention=CallingConvention::StdCall)]
    extern long GetVersionEx ( [In, Out] OSVERSIONINFO* povi );

    // This is the entry point for this application.
    #ifdef _UNICODE
    int wmain(void)
    #else
    int main(void)
    #endif
    {
    Console::WriteLine(GetServicePack());

    return 0;
    }


    String *GetServicePack(void)
    {
    OSVERSIONINFO ovi;
    ovi.dwOSVersionInfoSize = Marshal::SizeOf ( __typeof(OSVERSIONINFO) );

    if ( GetVersionEx ( &ovi ) == 0 )
    {
    return (S"Call to GetVersionEx() failed.");

    }
    if (ovi.szCSDVersion==(S""))
    return (S"No Service Pack Installed");
    else
    return (ovi.szCSDVersion);


    }
  4. 빌드 및 프로젝트를 실행하려면 Ctrl + F5를 누릅니다. 서비스 팩 정보가 콘솔 창에 나타납니다.