“This program requires Windows 2000 or newer operating system”.
Когда видишь такое сообщение на Windows 7, это означает, что разработчики приложения допустили ошибку либо в коде проверки версии операционной системы, либо, что менее вероятно, – в самом сообщении. Второй вариант возможен, если программа действительно не должна работать в новых версиях операционной системы. В обоих случаях, с точки зрения пользователя это чистой воды баг. То ли в коде, то ли в дизайне, то ли в маркетинговом отделе…
В любом случае обходятся такие ограничения элементарно просто. Достаточно открыть окно свойств исполняемого файла или ярлыка, выбрать вкладку «совместимость» и в выпадающем списке выбрать нужную версию операционной системы. При следующем запуске, программа будет запущена вместе с набором заплаток, которые в том числе подменяют номер версии системы:

Когда узнал, что строгое равенство при проверке версии является основной проблемой совместимости, был очень удивлен. Что движет разработчиком, когда он проверяет строго, что версия равна 5?
Мне кажется это из-за того, что версии Windows не всегда major версию прибавляют. Вот и в Windows 7 оставили версию 6.1.7000…
А эта закладка Compatibility позволяет обходить ограничения, если продукт и правда привязан к конкретной версии Windows лицензией.
Ну это прям совсем маленькая хитрость. Ну прям малюсенькая при малюсенькая и на таком блоге. Или вас достали программы, в которых программы не умеют проверять версию? Я был на конференции для партнеров MS и там говорили, что 54% всех проблем несовместимости с Vista – это неверная проверка версии и поэтому в Windows 7 не стали менять версию, а оставили 6, но изменили подверсию на 1. В принципе, это же и логично, ведь перед нами будет та же Vista, но в улучшенном обличии.
Я уже писал тебе как-то в комментах, что это не прокатывает, например, с последней Nokia PC Suite.
А ещё это не прокатывает с Windows Live Suite в Windows 2003. В Микрософте тоже есть идиоты.
Этот способ никак не претендует на звание серебряной пули.
Я как-то не уловил сарказма. У меня какой-то особенный блог, что здесь нельзя об этом писать?
Если бы со времен появления Win32 API была бы функция, которая возвращала пару чисел (major version, minor version) и эта бы функция не менялась в том числе и по названию и по параметрам включая и NET Framework, то можно было бы говорить, что разработчики не умеют проверять версию, а так чистой воды design bug от Microsoft
я своих программах никогда версию не проверяю ибо слишком изменчива эта процедура
Абсолютно никакого сарказма. Просто ты в основном писал более сложные вещи и тут такое простое… И конечно же можно такое написать, я как-то вообще не запрещал. Просто заметка выделилась своей простотой и все.
GetVersionEx доступна с 94-ого года.
Класс System.Version также доступен начиная с первой версии .NET
Можете привести пример изменчивости?
А я что вижу, о том и пою.
Вот сейчас я ковыряюсь в ошибках совместимости Windows 7 и сторонних программ. И у меня складывается впечатление, что такие простые вещи не знает 90% разработчиков и 95% пользователей.
Привет. Извини, я не по теме поста. Как я понимаю – у тебя хорошее понимание 32- и 64-битной Windows. У меня проблема при работе с функцией CreateRemoteThread. Есть 32-битное приложение и 32-битная dll. Инджектим одно в другое. На WinXP 32-бита всё работает нормально. Всё тоже самое (32-х битные длл и приложение) на WinXP 64-бита – не срабатывает CreateRemoteThread, возвращает ошибку Access denied.
Где искать проблему?
Есть предположение, что проблема из-за 32-х битности. каждое приложение работает в некоторой песочнице. И инжектор (отдельное приложение) не может код вставить из-за недоступности другого 32-х битного приложения.
Очень бы помогло несколько ссылок по работе 32-х битных приложений на 64-битных платформах.
заранее спасибо
Я думаю, что программисты знают, просто относятся к своей работе спустя рукава, поэтому и происходят эти проблемы. Вот примеры правильной проверки версии ОС нужно приводить постоянно. Неужели так сложно сравнивать номер версии на больше или равно, а не просто равно. Если уж и сравниваете только на равенство, то и в документации нужно писать, что программа предназначена строго для определенной версии Windows и в будущем 100% работать не будет.
> nl_2010_pro
NetLimiter? Так дело не только в версии ОС, видимо, они выпустили бетку для Win7 отдельно.
Сам не проверял, правда, а у Вас 2010 заработал на Win7?
В 2010 есть баг в драйвере, который на Win7 Beta проявляется.
На Win7 RC заработал, но баг никуда не делся. В любой момент может рвануть.
Если кому интересною. Разобрались с автором комментария offline. Описателю, передаваемому в CreateRemoteThread не хватало прав: