Вопрос

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

Я не слишком увлечен:

  • просто оберните код Windows 7 в try catch
  • если OS = "Windows 7", То...

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Если вы настаиваете на том, чтобы самостоятельно проверить версию и посмотреть, на какой операционной системе вы работаете, пожалуйста помните о волшебстве >=.Вы знаете, сколько существует кода, который тестирует версию именно так 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

Кейт

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top