Вопрос
Я хочу воспользоваться преимуществами новой функциональности панели задач 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
Кейт