Adicionando% USERPROFILE% a um comando no registro do Windows

6

Estou tentando gravar um hack de registro que simplificará algumas das minhas tarefas de configuração quando eu criar uma nova VM ou repavlar meu laptop. Uma coisa que estou fazendo é mudar para versões portáteis (sincronizadas no Dropbox) de um monte de meus aplicativos favoritos, incluindo o Notepad ++.

Eu quero criar uma entrada de registro para permitir que eu tenha a opção Abrir com o Notepad ++ no meu menu do botão direito, que é a única coisa que estou perdendo com a versão portátil. Estou recebendo um erro:

Windows cannot access the specified device, path or file. You may not have the 
appropriate permissions to access the item.

Este é o meu arquivo .reg :

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++]
"Icon"="%USERPROFILE%\Dropbox\Programs\Setup\Icons\Notepad++.ico"
@=""

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++\command]
@="%USERPROFILE%\Dropbox\Programs\Notepad++\notepad++.exe %1"

O ícone funciona perfeitamente. Eu posso obter a entrada acima para funcionar bem se eu codificar C:\Users\myusername , mas vou para portabilidade aqui.

Tenho certeza de que o problema é encontrar a sequência de escape certa para os símbolos % , mas é difícil dizer.

Sugestões?

EDIT: Eu fui com a opção de comando add reg , e depois de um pouco de tentativa e erro, aqui está o comando que funcionou:

reg add HKCR\*\shell\OpenWithNotepad++\command /t REG_EXPAND_SZ /ve /d ^%USERPROFILE^%"\Dropbox\Programs\Notepad++\notepad++.exe %1"

Depois de executar o comando, também exportei os resultados como um arquivo .reg . Ganha ao redor.

    
por Josh Earl 10.05.2012 / 04:12

1 resposta

8

Para usar (expandir) variáveis de ambiente no registro, o valor deve ser do tipo REG_EXPAND_SZ .

Baseado em esta pergunta , seria mais fácil adicionar esse tipo de valor com o comando reg em vez de um arquivo .reg . .

reg add <KEY> /v <NAME> /t REG_EXPAND_SZ /d <DATA>

Veja reg add /? para mais informações sobre esta sintaxe.

Você também pode codificar os dados como hexadecimais. Há alguns exemplos desse aqui :

REG_EXPAND_SZ data must be presented as what MS calls a binary data type (subtype "2"), so the value must be formatted in a kind of hexidecimal format, comma-delimited, two tokens per byte (padded with zeros), with a terminating null byte of course (and further explanation is obviously far beyond the scope of this article, and the author won't be held responsible for anyone's misuse of the incomplete information given thus far). So the line above will not work but indicates the end result I wanted to achieve. As a real working .REG -file entry the example above must be rendered as:

"SoMeThIng"="%WINDIR%\system32"

torna-se

"SoMeThIng"=hex(2):22,25,57,49,4e,44,49,52,25,5c,5c,73,79,73,74,65,6d,33,32,22,00
    
por 10.05.2012 / 04:49