Significado do til nos valores do registro para o modo de compatibilidade no Windows 8+

4

Eu tenho que suportar um aplicativo herdado, originalmente criado para o Windows NT 4 (32 bits), mas ainda funcionando bem com o Windows 10 (64 bits), desde que todas as configurações de compatibilidade sejam feitas. O problema é que estes têm que ser feitos principalmente à mão.

Estou tentando descobrir como criar um programa ou script que eu possa fornecer para essa finalidade. Eu já sei que as configurações de compatibilidade são armazenadas no registro em HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers ou HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers respectivamente (dependendo se as configurações são aplicadas a todos ou apenas um único usuário), adicionando valores cujos nomes são os caminhos do aplicativo como por exemplo

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

adicionando conteúdo como (para permitir compatibilidade com o Windows XP Service Pack 3)

WINXPSP3

como observado no Windows 7 ou

~ WINXPSP3

como observado no Windows 8.1 (e no Windows 8)

O que eu quero entender antes de enviar essa ferramenta é:

Qual é o propósito ou o significado do sinal de til que inicia o conteúdo do valor?

Estou procurando por meses (Google, Bing), mas agora não encontrei nada além de perguntas. Há apenas um palpite de que também poderia ser sem sentido (?):

When compatibility mode is set via Properties, Windoze places a tilde (~) followed by a space before the value, e.g. "~ WINXPSP3". Yet it seems to work (or not work as the case may be) regardless of the tilde.

Mas a maioria das sugestões sobre como ajustar as configurações de compatibilidade parece tomar muito cuidado com esse recurso mágico:

Note that there is a space between the tilde and the HIGHDPIAWARE.

Existe alguém que realmente saiba algo sobre isso?

    
por Wolf 30.06.2016 / 12:04

1 resposta

3

Eu estava olhando para a mesma coisa e achei isso (ênfase minha):

If the value contains the sequence tilde [~], then the value is interpreted as a Null-delimited list of strings (REG_MULTI_SZ). For example, to specify a list containing the three strings a, b and c, use "a[~]b[~]c".

The sequence [~] within the value separates the individual strings and is interpreted and stored as a Null character.

If a [~] precedes the string list, the strings are to be appended to any existing registry value strings. If an appending string already occurs in the registry value, the original occurrence of the string is removed.

If a [~] follows the end of the string list, the strings are to be prepended to any existing registry value strings. If a prepending string already occurs in the registry value, the original occurrence of the string is removed.

If a [~] is at both the beginning and the end or at neither the beginning nor the end of the string list, the strings are to replace any existing registry value strings.

Otherwise, the value is interpreted and stored as a string (REG_SZ).

Fonte: o artigo Tabela de registro ( Windows) na Referência do Banco de Dados do Instalador

Portanto, parece que o caractere til apenas acrescenta ou acrescenta valores de string.

    
por 12.07.2016 / 15:58