문제
.NET 애플리케이션에서 새로운 Windows 7 작업 표시 줄 기능을 활용하고 싶습니다. 저의 목표는 Windows XP 및 Windows 7에 대한 뚜렷한 코드를 갖는 것입니다.
나는 지나치게 열중하지 않습니다.
- 시도 캐치에서 Windows 7 코드를 래핑합니다.
- os = "Windows 7"인 경우 ...
물론 이것은 대부분의 일이 아니라면. 나는 좋은 접근 방식을 위해 모든 곳에서 사냥을했지만 성공하지 못했습니다. Microsoft가 관리하지 않는 코드 래퍼 라이브러리는 Windows 7에서 실행 중이라고 가정하는 것 같습니다.
해결책
나는 아무 문제가 없다고 생각합니다 if OS = "Windows 7
". 물론,
- 그것은해야한다
if OS >= "Windows 7"
(따라서 Windows 7.1에서 깨지지 않도록 또는 후임자가 될 것입니다). - 확인하여 수행해야합니다 Environment.OSVERSION (플랫폼 및> = 버전).
코드를 혼란스럽게 만들고 싶지 않다면 if (isWindows7) {...}
, 플랫폼 별 코드를 별도의 클래스에 넣을 수 있습니다. 예를 들어 인터페이스를 만들 수 있습니다
interface IOSSpecific {
void AddToJumpList(...);
...
}
그리고이 클래스의 두 가지 구현, 하나는> = Win 7, 다른 하나는 다른 하나를위한 것입니다 (다른 일을하거나 전혀 아무것도하지 않음). 응용 프로그램이 시작되면 전역 유형의 일부 변수를 인스턴스화합니다. IOSSpecific
두 구현 중 하나가 있습니다.
다른 팁
나는 당신이 할 것이라고 기대할 것입니다 :
if ( Environment.OSVersion.Platform == windows7Id)
{
// win7 stuff
}
Windows7 ID가 어떤 가치가 있는지 모릅니다.
나는 일반적으로 다른 플랫폼을 지원하기 위해 공장에서 어떤 객체를 만든지를 결정하기 위해이 질문을합니다. 코드 기반 전체에 이것들을 뿌리거나 예외를 포착하는 것보다 더 좋습니다.
코드 팩과 같은 래퍼 라이브러리를 사용하는 경우 (http://code.msdn.microsoft.com/windowsapicodepack ) 버전을 확인합니다. 당신은 계속해서 라이브러리 방법을 호출하면 달리기를 할 때 OS에없는 것을 시도하면 플랫폼을 지원합니다.
P/일부 Windows DLL로 호출되는 경우 EntryPointNotFoundException을 잡을 수도 있습니다. 기능이 몇 년부터 다운 레벨 OS로 추가 될 수 있기 때문에 자체 인터 로프를 수행 할 때 가장 좋은 방법입니다.
이 두 가지를 사용하면 작업 표시 줄이 없거나 라이브러리가 없거나 어떤 기능이 없는지를 상기시켜주는 일종의 플래그를 캐시 할 수 있습니다.
자신의 버전 확인을하고 귀하가 어떤 OS에 있는지 확인하는 경우 제발 > =의 마법을 기억하십시오. 버전을 테스트하는 코드가 얼마나 많은지 알고 있습니다. 바로 그거죠 XP SP2와 "XP SP2 이상이 필요하다"라는 메시지 상자를 올려 놓습니까? ㅏ 톤. 실제로 Win7의 주요 버전은 6이므로 "6과 동일"에 대한 모든 코드를 확인하는 것이 여전히 작동합니다. 그 사람이되지 마세요.
if (Environment.OSVersion.Version.Major >= 6)
{
if (Environment.OSVersion.Version.Minor >= 1)
// Do Win7 thing
else
// Do Vista thing
}
else if (Environment.OSVersion.Version.Major >= 5)
// Do XP thing
당신은 모든 주요/작은 숫자를 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/ms724832%28vs.85%29.aspx
케이트