Como faço para adicionar uma cadeia REG_SZ de várias linhas para o registro a partir da linha de comando?

StackOverflow https://stackoverflow.com/questions/153879

  •  03-07-2019
  •  | 
  •  

Pergunta

Como parte de uma configuração de compilação em uma máquina Windows Eu preciso adicionar uma entrada de registro e eu gostaria de fazê-lo a partir de um arquivo de lote simples.

A entrada é para um aplicativo de terceiros para que o formato é fixo.

A entrada assume a forma de uma cadeia REG_SZ mas precisa conter novas linhas ie. caracteres 0xOA como separadores.

Eu acertei alguns problemas.

Primeiro tentar regedit usado para carregar um arquivo .reg gerado. Esta falha, uma vez que não parecem gostar tanto quer cadeias longas ou cordas com novas linhas. Eu descobri que a exportação funciona bem importação falhar. Eu era capaz de exportação de teste como o terceiro partido app adiciona entradas semelhantes diretamente através da API do Win32.

Segundo tentativa usou o comando REG ADD, mas não consigo encontrar qualquer maneira para adicionar o caracteres de nova linha tudo que eu tento apenas acaba com uma seqüência literal que está sendo adicionado.

Foi útil?

Solução

Você pode criar um arquivo VBScript (VBS) e apenas chamá-lo a partir de um arquivo de lote, supondo que você está fazendo outras coisas no lote diferente de esta alteração de registo. No VBScript você estaria olhando para algo como:

set WSHShell = CreateObject("WScript.Shell")  
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"

Você deve ser capaz de encontrar os valores de tipo possíveis usando o Google.

Outras dicas

Se você não está restrito a uma linguagem de script, você pode fazê-lo em C # com

Registry.CurrentUser.OpenSubKey(@"software\classes\something", true).SetValue("some key", "sometext\nothertext", RegistryValueKind.String);

Você pode importar cordas REG_SZ de várias linhas que contenham retorno de carro (CR) e avanço de linha breaks (LF) de fim-de-linha (EOL) para o registro usando arquivos .reg, desde que você não se importa traduzir o texto como UTF-16LE hexadecimal dados codificados. Para importar um REG_SZ com este texto:

1st Line
2nd Line

Você pode criar um arquivo chamado MULTILINETEXT.REG que contém o seguinte:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"MULTILINETEXT"=hex(1):31,00,73,00,74,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
32,00,6e,00,64,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
00,00

Para codificar ASCII em UTF-16LE, basta adicionar um byte nulo após cada valor de código ASCII. valores REG_SZ deve terminar com um caractere nulo (,00,00) em notação UTF-16LE.

Import a alteração do registro no REG.EXE IMPORT MULTILINETEXT.REG arquivo em lotes.

O exemplo usa a chave Ambiente porque é conveniente, não porque é particularmente útil para adicionar esses dados para variáveis ??de ambiente. Pode-se usar o regedit para verificar se os dados REG_SZ importado contém os caracteres CRLF.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top