Приложения работают с системой через набор функций (API). Им вообще пофиг на версию. Если api и библиотеки поддерживаются, приложение работает. Никаких функций, возвращающих версию системы нет. Единственное, где есть выбор версий и циферки, это при создание устройства директикс.
Но в приложении Windows задается версия ОС, которую оно поддерживает (в манифесте). И новые версии Windows обманывают старые приложения, представляясь им старее, чем есть (через якобы несуществующую функцию получения версии системы) и подсовывает им старые версии API.
Не знаю всех сред разработок, но в визуал студио никаких настроек версии систем нет и компилятор тем более не знает, на какой версии файл будет запускаться. Есть настройки разрядности, многопоточности, статические / динамические библиотеки. Версии никого не обманывают, просто для обратной совместимости там поддерживаются функции, объявленные устаревшим.
Если вас интересует этот вопрос, разберитесь, что тако манифест приложения, и что происходит, если пользователь в свойствах exe-файла укажет в параметрах совместимости поддержку,скажем, только Windows 8 и старее.
При чем тут пользователь. Пользователь может, например, указать какой программой он хочет открывать какой-то файл. Это не значит, что этот файл нельзя открыть другой программой и это ничего не меняет в свойствах файла. Так и с исполняемым файлом. На момент компиляции никаких знаний о версии системы, на которой он может запускаться, просто не существует. Не говоря уже о виндовских разработках вроде COM, OLE и т.д где в принципе интерфейсы отделяются от их реализации и не зависят не только от версии, а вообще от платформы. Вопрос есть ли такая функциональность / интерфейс или нет. Ни о каких версиях системы разговора вообще быть не может.
Потратить минуту, чтобы посмотреть свойсва любого exe файла и убедиться, что пользователь может поменять параметры совместимости (Run the program in compatibility mode for [Windows 8]", это нет. А спорить, это да.
Еще раз. Параметры совместимости программы задаются в манифесте (это XML, который обычно помещается в ресурсы приложения, но может быть отдельно). Пользователь, который очень даже причем, может эти параметры поменять. В режиме совместимости некоторые API работают-по другому.
Вот хотя бы онлайн справку по функции API GetVersion почитайте, там написано, что свойства совместимости с конкретной системой (заданные разработчиком либо пользователем) очень даже влияют на ее работу:
Приложения, не манифестированные для Windows 8.1 или Windows 10, будут возвращать Windows 8 версию ОС (6.2). После манифеста приложения для заданной версии операционной системы GetVersion всегда будет возвращать версию, для которую приложение будет манифестировано в будущих выпусках. Сведения о том, как манифестировать приложения для
( ... )
Возможно, есть какие-то различия в реализациях некоторых функций. Выбор может позволить выбрать вместо дефолтной более оптимизированную. Но это на стороне виндоуз, они там могут что угодно делать. А при компиляции никакого знания о версии системы нет и уж, тем более, пользователь не может знать, что там в бинарном файле, чтобы делать какие-то выводы.
Приложения работают с системой через набор функций (API). Им вообще пофиг на версию. Если api и библиотеки поддерживаются, приложение работает. Никаких функций, возвращающих версию системы нет. Единственное, где есть выбор версий и циферки, это при создание устройства директикс.
Reply
Reply
Это все не имеет отношения к топику.
Но в приложении Windows задается версия ОС, которую оно поддерживает (в манифесте). И новые версии Windows обманывают старые приложения, представляясь им старее, чем есть (через якобы несуществующую функцию получения версии системы) и подсовывает им старые версии API.
Reply
Не знаю всех сред разработок, но в визуал студио никаких настроек версии систем нет и компилятор тем более не знает, на какой версии файл будет запускаться. Есть настройки разрядности, многопоточности, статические / динамические библиотеки. Версии никого не обманывают, просто для обратной совместимости там поддерживаются функции, объявленные устаревшим.
Reply
Reply
При чем тут пользователь. Пользователь может, например, указать какой программой он хочет открывать какой-то файл. Это не значит, что этот файл нельзя открыть другой программой и это ничего не меняет в свойствах файла. Так и с исполняемым файлом. На момент компиляции никаких знаний о версии системы, на которой он может запускаться, просто не существует. Не говоря уже о виндовских разработках вроде COM, OLE и т.д где в принципе интерфейсы отделяются от их реализации и не зависят не только от версии, а вообще от платформы. Вопрос есть ли такая функциональность / интерфейс или нет. Ни о каких версиях системы разговора вообще быть не может.
Reply
Вы потрясающи.
Потратить минуту, чтобы посмотреть свойсва любого exe файла и убедиться, что пользователь может поменять параметры совместимости (Run the program in compatibility mode for [Windows 8]", это нет. А спорить, это да.
Еще раз. Параметры совместимости программы задаются в манифесте (это XML, который обычно помещается в ресурсы приложения, но может быть отдельно). Пользователь, который очень даже причем, может эти параметры поменять. В режиме совместимости некоторые API работают-по другому.
Вот хотя бы онлайн справку по функции API GetVersion почитайте, там написано, что свойства совместимости с конкретной системой (заданные разработчиком либо пользователем) очень даже влияют на ее работу:
Приложения, не манифестированные для Windows 8.1 или Windows 10, будут возвращать Windows 8 версию ОС (6.2). После манифеста приложения для заданной версии операционной системы GetVersion всегда будет возвращать версию, для которую приложение будет манифестировано в будущих выпусках. Сведения о том, как манифестировать приложения для ( ... )
Reply
Возможно, есть какие-то различия в реализациях некоторых функций. Выбор может позволить выбрать вместо дефолтной более оптимизированную. Но это на стороне виндоуз, они там могут что угодно делать. А при компиляции никакого знания о версии системы нет и уж, тем более, пользователь не может знать, что там в бинарном файле, чтобы делать какие-то выводы.
Reply
Leave a comment