.NET для Windows 7 - PullRequest
       12

.NET для Windows 7

1 голос
/ 01 декабря 2009

Я хочу воспользоваться новой функциональностью панели задач Windows 7 в приложении .NET и хотел бы знать, что люди считают лучшим способом проверки функций Windows 7 в .NET. Моя цель - создать отдельный код для Windows XP и Windows 7.

Я не очень заинтересован в:

  • просто завернуть код Windows 7 в попытку поймать
  • если ОС = "Windows 7" тогда ...

Если, конечно, это то, что большинство делает. Я действительно везде охотился за хорошим подходом, но безуспешно. Библиотека оболочки неуправляемого кода Microsoft, похоже, просто предполагает, что она работает в Windows 7 ...

Ответы [ 3 ]

4 голосов
/ 01 декабря 2009

Я думаю, что нет ничего плохого в if OS = "Windows 7 ". Конечно,

  • это должно быть if OS >= "Windows 7" (чтобы оно не сломалось в Windows 7.1 или какой-либо другой версии) и
  • это должно быть сделано путем проверки Environment.OSVersion (Платформа и> = Версия).

Если вы не хотите загромождать свой код с помощью if (isWindows7) {...}, вы можете захотеть поместить специфичный для платформы код в отдельный класс. Например, вы можете создать интерфейс

interface IOSSpecific {
    void AddToJumpList(...);
    ...
}

и две реализации этого класса, одна для> = Win 7 и одна для других (которые делают разные вещи или ничего не делают). Когда ваше приложение запускается, вы создаете какую-то глобальную переменную типа IOSSpecific с помощью одной из двух реализаций.

2 голосов
/ 01 декабря 2009

Я ожидаю, что вы делаете:

if ( Environment.OSVersion.Platform == windows7Id)
{
    // win7 stuff
}

Не знаю, какое значение имеет идентификатор Windows7.

Обычно я задаю этот вопрос, чтобы решить, какой объект я создаю на своих фабриках для поддержки разных платформ. Это лучше, чем разбрасывать их по всей базе кода или перехватывать исключения.

1 голос
/ 28 января 2010

Если вы используете библиотеку-оболочку, такую ​​как Code Pack (http://code.msdn.microsoft.com/WindowsAPICodePack), она проверяет версию за вас.Вы идете дальше и вызываете методы библиотеки, и она генерирует исключение PlatformNotSupportedException, если вы пытаетесь выполнить то, чего нет в ОС, когда вы работаете.

Вы также можете перехватить EntryPointNotFoundException, если вы используете P / Invoking в некоторых WindowsDLL.Это лучший подход, когда вы выполняете собственное взаимодействие, потому что функциональность может добавляться (через обновления и пакеты обновления) через несколько лет в ОС более низкого уровня.

С обоими из них вы можете кешировать какой-то флаг, который напоминает вам, что панели задач нет, или нет библиотек, или у вас нет каких-либо функций, чтобы сохранить удачный бросок броска и ловли.исключение.

Если вы настаиваете на том, чтобы проверить свою версию и увидеть, на какой ОС вы работаете, , пожалуйста, вспомните магию> =.Вы знаете, сколько существует кода, который проверяет версию точно XP SP2, а затем выводит окно с сообщением «Требуется XP SP2 или более поздняя версия»?A тонна .Фактически, именно поэтому основной версией для 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

Кейт

...