4

Я должен поддерживать устаревшее приложение, изначально созданное для Windows NT 4 (32-разрядная версия), но все еще работающее в Windows 10 (64-разрядное приложение), при условии, что все параметры совместимости выполнены. Проблема в том, что это нужно делать в основном вручную.

Я пытаюсь понять, как создать программу или скрипт, который я мог бы поставить для этой цели. Я уже знаю, что параметры совместимости хранятся в реестре в папке HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers или HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers соответственно (в зависимости от того, применяются ли параметры всем или только одному пользователю), добавляя значения, имена которых являются путями приложения, например,

C:\Program Files (x86)\SomeApp\SomeBinary.exe 

добавление содержимого (например, для обеспечения совместимости с Windows XP с пакетом обновления 3)

WINXPSP3

как отмечено в Windows 7, или

~ WINXPSP3

как наблюдается в Windows 8.1 (и Windows 8)

Что я хочу понять перед отправкой такого инструмента:

Какова цель или значение знака тильды, начинающего содержание значения?

Я ищу его месяцами (Google, Bing), но к настоящему времени я не нашел ничего, кроме вопросов. Есть только предположение, что это также может быть бессмысленным (?):

Когда режим совместимости устанавливается через Свойства, Windoze ставит тильду (~), за которой следует пробел перед значением, например, «~ WINXPSP3». Тем не менее, кажется, работает (или не работает в зависимости от обстоятельств) независимо от тильды.

Но большинство предложений по настройке параметров совместимости, похоже, очень заботятся об этом волшебном символе:

Обратите внимание, что между тильдой и HIGHDPIAWARE есть пространство.

Есть ли кто-нибудь, кто действительно что-то знает об этом?

1 ответ1

3

Я смотрел на то же самое и нашел это (выделение мое):

Если значение содержит последовательность тильды [~], то это значение интерпретируется как список строк, разделенных нулем (REG_MULTI_SZ). Например, чтобы указать список, содержащий три строки a, b и c, используйте «a [~] b [~] c».

Последовательность [~] в значении разделяет отдельные строки и интерпретируется и сохраняется как нулевой символ.

Если [~] предшествует списку строк, строки должны быть добавлены к любым существующим строкам значений реестра. Если в значении реестра уже добавлена строка, исходное вхождение строки удаляется.

Если [~] следует за концом списка строк, строки должны быть добавлены перед любыми существующими строками значений реестра. Если в значении реестра уже присутствует предшествующая строка, исходное вхождение строки удаляется.

Если [~] находится как в начале, так и в конце или ни в начале, ни в конце списка строк, строки должны заменить любые существующие строки значений реестра.

В противном случае значение интерпретируется и сохраняется как строка (REG_SZ).

Источник: статья « Таблица реестра (Windows)» в справочнике базы данных установщика

Таким образом, кажется, что символ тильды просто добавляет или добавляет значения строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .