Leave a comment

melon_mask July 12 2024, 18:21:10 UTC

Приложения работают с системой через набор функций (API). Им вообще пофиг на версию. Если api и библиотеки поддерживаются, приложение работает. Никаких функций, возвращающих версию системы нет. Единственное, где есть выбор версий и циферки, это при создание устройства директикс.

Reply

zlojvavan July 12 2024, 19:53:11 UTC
GetVersion и т.п. хоть и deprecated с 8.1 и позднее, но никуда не исчезали

Reply

tlkh July 12 2024, 21:32:27 UTC

Это все не имеет отношения к топику.

Но в приложении Windows задается версия ОС, которую оно поддерживает (в манифесте). И новые версии Windows обманывают старые приложения, представляясь им старее, чем есть (через якобы несуществующую функцию получения версии системы) и подсовывает им старые версии API.

Reply

melon_mask July 13 2024, 07:02:45 UTC

Не знаю всех сред разработок, но в визуал студио никаких настроек версии систем нет и компилятор тем более не знает, на какой версии файл будет запускаться. Есть настройки разрядности, многопоточности, статические / динамические библиотеки. Версии никого не обманывают, просто для обратной совместимости там поддерживаются функции, объявленные устаревшим.

Reply

tlkh July 13 2024, 07:18:06 UTC
Если вас интересует этот вопрос, разберитесь, что тако манифест приложения, и что происходит, если пользователь в свойствах exe-файла укажет в параметрах совместимости поддержку,скажем, только Windows 8 и старее.

Reply

melon_mask July 13 2024, 08:07:36 UTC

При чем тут пользователь. Пользователь может, например, указать какой программой он хочет открывать какой-то файл. Это не значит, что этот файл нельзя открыть другой программой и это ничего не меняет в свойствах файла. Так и с исполняемым файлом. На момент компиляции никаких знаний о версии системы, на которой он может запускаться, просто не существует. Не говоря уже о виндовских разработках вроде COM, OLE и т.д где в принципе интерфейсы отделяются от их реализации и не зависят не только от версии, а вообще от платформы. Вопрос есть ли такая функциональность / интерфейс или нет. Ни о каких версиях системы разговора вообще быть не может.

Reply

tlkh July 13 2024, 08:48:25 UTC

Вы потрясающи.

Потратить минуту, чтобы посмотреть свойсва любого 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

melon_mask July 13 2024, 09:01:20 UTC

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

Reply


Leave a comment

Up