Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Версия ОС была обновлена с выпуском Windows 10 ОС. Это означает, что внутренний номер версии для Windows 10 также был изменен на 10.0. Как и раньше, мы хотим сделать все возможное для обеспечения совместимости с приложениями и устройствами после изменения номера версии ОС. Для большинства категорий приложений (без зависимостей ядра) это изменение не повлияет на функциональность приложения, и существующие приложения будут работать нормально на Windows 10.
Проявления
Проявление этого изменения будет зависеть от конкретного приложения. Это означает, что любое приложение, выполняющее непосредственную проверку версии ОС, в ответ на запрос будет получать ответ с указанием более высокого номера версии, что может привести к возникновению одной или нескольких ситуаций, описанных ниже:
- Установщик приложения не сможет установить приложение, и оно может не запуститься.
- Приложения могут работать нестабильно или со сбоями.
- Приложения могут создавать сообщения об ошибках, но продолжать работать в штатном режиме.
Некоторые приложения выполняют проверку номера версии ОС и просто передают пользователям предупреждение. Но есть приложения, работа которых очень сильно зависит от результатов проверки номера версии ОС (в драйверах или в режиме ядра для предотвращения обнаружения номера версии). В этих случаях при обнаружении несовместимой версии приложение запустить не удастся. Поэтому вместо проверки версии мы рекомендуем использовать один из следующих подходов.
- Если приложение зависит от конкретной функции API, убедитесь, что вы используете правильную версию API.
- Номер версии NTDDI (интерфейс драйвера устройства NT) увеличивается только в том случае, если целевые функции в API изменяются. Убедитесь, что вы обнаружите изменение с помощью APISet или другого доступного API, созданного командой функций, и не используйте версию в качестве прокси-сервера для некоторых функций или исправлений. Если есть критические изменения и правильная проверка невозможна, можно достоверно утверждать об обнаружении ошибки.
- Убедитесь, что приложение не проверяет версию нечетными способами, например с помощью реестра, версий файлов, смещения, режима ядра, драйверов или других средств. Если приложению абсолютно нужно проверить версию, используйте API GetVersion, которые должны возвращать основной, дополнительный и номер сборки.
- Если вы используете API GetVersion или другие вспомогательные функции версии, такие как VerifyVersionInfo, помните, что поведение этого API изменилось с Windows 8.1. Дополнительные сведения см. в документации по API .
- Если вы владеете приложениями, такими как антивредоносное ПО или брандмауэр, следует работать через обычные каналы обратной связи и через программу Windows За кулисами.
Манифест приложения
Ниже приведен пример манифеста приложения:
<exe>.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity
type="win32"
name=SXS_ASSEMBLY_NAME
version=SXS_ASSEMBLY_VERSION
processorArchitecture=SXS_PROCESSOR_ARCHITECTURE
/>
<description> my app exe </description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
* <!-- Windows 10 -->
* <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>
Добавьте эти переменные в источники:
- SXS_MANIFEST_RESOURCE_ID=1
- SXS_MANIFEST=foo.manifest
- SXS_ASSEMBLY_NAME=Microsoft.Windows.Foo
- SXS_ASSEMBLY_VERSION=1.0
- SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
- SXS_MANIFEST_IN_RESOURCES=1
Для Windows 10 две строки выше, помеченные звездочкой (*), показывают, как точно ориентироваться на приложение для Windows 10 версии ОС. Манифест .exe для Windows 10 не повлияет на выполнение в предыдущих версиях ОС Windows. Вы также можете добавить его в RC-файл, если он уже определен. Добавление trustInfo не является обязательным, но настоятельно рекомендуется. Это позволит .exe всегда получать правильную версию независимо от того, является ли ОС Windows 10 или Windows 8.1.