2011-11-03 7 views
1

설치시 Windows의 잘못된 버전을 감지하는 경우가 있습니다. (그것은 시스템 정보를 탐지하기 위해 내장 된 Wise installer 기능을 통해 버전을 탐지하고 어떻게 작동 하는지를 말하지 않습니다).Win API 호출을 통해 Windows 빌드 버전을 읽는 방법 또는 레지스트리 값을 더 잘 읽는 방법

그래서 Windows 버전을 감지하는 다른 방법을 찾고 있습니다. 현명한 설치 프로그램은 Windows API 함수를 호출하는 기능이 매우 제한적이므로 레지스트리 또는 특정 파일에서 읽기가 쉬울 것입니다. 물론 파일 버전을 Windows 버전에 매핑해야합니다.

나는이 토론 스레드를 발견했다 : http://www.velocityreviews.com/forums/t513244-best-way-to-get-version-from-registry.html 그러나 그것은 인용이 없었다. 그래서 얼마나 신뢰할 수 있을지 확신하지 못합니다.

+1

이것은 의도적 인 것일 수 있습니다. Windows는 appcompat shim을 사용합니다. 그러면 똑같은 버전을 다시 읽게됩니다. 이에 대해 지원 업체에 핑 (ping)하십시오. –

+0

MSI 패키지 또는 독점 형식? –

+0

MSI가 아닌 독점 Wise .exe 형식을 사용합니다. –

답변

1

난 당신이 오히려 API를 사용하지 않을 이해하지만 당신은 현명한 당신을주는 것을 신뢰하지 않는 경우, 그것을 확신 할 수있는 유일한 방법이 될 수 있습니다

GetVersionEx 함수() http://msdn.microsoft.com/en-us/library/ms724451(v=VS.85).aspx

가있다 링크 된 페이지에서 샘플 코드 (및 실제로 필요한 기능에 더 가까운 대체 기능에 대한 많은 의견).

+0

Windows 7 컴퓨터에서 호환 모드 (XP 용)로 응용 프로그램을 실행중인 경우 True (설치된) Win O/S 버전을보고하지 않습니다. Microsoft에서 "호환 모드가 적용되면 GetVersionEx 함수는 운영 체제가 설치되어있는 운영 체제가 아닐 수 있음을 나타내는 운영 체제를보고합니다. 예를 들어 호환 모드가 적용되는 경우 GetVersionEx는 운영 체제가 응용 프로그램 호환성을 위해 선택되었습니다. " –

+0

사실,하지만 윈도우가 당신이해야 할 일을하도록하기 위해 당신이 말한 버전을보고 할 것입니다 : out-think compatibility mode는 일반적으로 응용 프로그램을 중단하려고 할 때만 유용합니다 . –

1

레지스트리 솔루션을 원할 경우 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion 키를보고 ProductVersion, CurrentVersion, CurrentBuild 값을 확인할 수 있습니다.

+0

좋은 생각이지만, "Windows 호환 모드 (XP SP3 용)"에서 .exe를 실행했을 때 Windows XP (Windows 7 컴퓨터)를보고했습니다. –

+0

호환 모드는 기본 OS보고 .C++ 같은 하위 언어로 내려간 경우 버전을 얻을 수있는 것 같습니다. http://msdn.microsoft.com/en-us/library/ms724832(v=vs.85).aspxa를 참조하십시오. – rmcsharry