Use uma variável de ambiente para apontar para um programa “Open With”

2

Eu tenho o Windows Vista, mas acho que isso também pertence a outras versões. Eu quero definir um programa para ser usado no menu de contexto Abrir com. Agora quero que o caminho para o .exe contenha uma variável de ambiente. Dessa forma, posso mover a localização do meu aplicativo, alterar a variável de ambiente correspondente e tudo funciona bem.

O problema tem três componentes:

  1. O valor da chave em

    HKEY_CLASSES_ROOT\Applications\myapp.exe\shell\open\command
    

    por exemplo, "C:\myapp\myapp.exe" "%1" , é codificado e o tipo é REG_SZ . Eu precisaria que ele fosse do tipo REG_EXPAND_SZ , por exemplo, "%MYAPPSDIR%\myapp.exe" "%1" . Isso é típico de programas internos, por exemplo, %SystemRoot%\system32\NOTEPAD.EXE %1 .

  2. O tipo de chave não pode ser mudado, então o que nasceu como REG_SZ , então ele vive.

  3. Parece que não posso " regenera "a variável como REG_EXPAND_SZ .

Existe alguma chance de fazer o que eu quero dizer?

Há também uma pergunta de bônus, Como receber um parâmetro em um arquivo de lote .

    
por sancho.s 25.06.2015 / 05:02

1 resposta

3
reg add "HKCR\Applications\myapp.exe\shell\open\command" /ve /t REG_EXPAND_SZ /d "\"^%MYAPPSDIR^%\myapp.exe\" \"^%1\"" /f

Nota:

  • para evitar a expansão de %MYAPPSDIR% pelo interpretador de linha de comando, o caractere % porcento deve ter o escape do caractere de escape padrão CLI ( ^ caret): ^%MYAPPSDIR^% ;
  • para incluir uma marca de aspas " nos dados, prefixe-os com o caractere de escape reg ( \ barra invertida). Por exemplo. \" aqui é uma citação, pois o comando REG interpretará \ como uma fuga para o caractere que o segue imediatamente.

Um exemplo ( copy&paste da minha linha de comando administrador ):

C:\Windows\system32>reg query "HKCR\Applications\mspaint.exe\shell\edit\command" /ve

HKEY_CLASSES_ROOT\Applications\mspaint.exe\shell\edit\command
    (Default)    REG_EXPAND_SZ    "%systemroot%\system32\mspaint.exe" "%1"

C:\Windows\system32>reg add "HKCR\Applications\mspaint.exe\shell\edit\command" /ve /t
 REG_EXPAND_SZ /d "\"^%systemroot^%\system32\mspaint.exe\" \"^%1\"" /f
The operation completed successfully.

C:\Windows\system32>reg query "HKCR\Applications\mspaint.exe\shell\edit\command" /ve

HKEY_CLASSES_ROOT\Applications\mspaint.exe\shell\edit\command
    (Default)    REG_EXPAND_SZ    "%systemroot%\system32\mspaint.exe" "%1"
    
por 25.06.2015 / 09:20