Come posso aggiungere una stringa REG_SZ multilinea al registro dalla riga di comando?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Come parte di una configurazione di build su un computer Windows, devo aggiungere una voce di registro e mi piacerebbe farlo da un semplice file batch.

La voce è per un'app di terze parti, quindi il formato è fisso.

La voce assume la forma di una stringa REG_SZ ma deve contenere nuove righe, ad es. 0xOA caratteri come separatori.

Ho riscontrato alcuni problemi.

Il primo tentativo ha utilizzato regedit per caricare un file .reg generato. Ciò fallì poiché non sembrava che le stringhe lunghe o le stringhe con nuove linee non sembrassero apprezzate. Ho scoperto che l'esportazione funziona bene l'importazione non riesce. Sono stato in grado di testare l'esportazione poiché l'app di terze parti aggiunge voci simili direttamente tramite l'API Win32.

Il secondo tentativo ha usato il comando REG ADD, ma non riesco comunque a aggiungere i caratteri di nuova riga, tutto quello che provo finisce con l'aggiunta di una stringa letterale.

È stato utile?

Soluzione

Puoi creare un file VBScript (.vbs) e chiamarlo semplicemente da un file batch, supponendo che tu stia facendo altre cose nel batch diverse da questa modifica del registro. In vbscript vedresti qualcosa del tipo:

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

Dovresti essere in grado di trovare i possibili valori di tipo utilizzando Google.

Altri suggerimenti

Se non sei vincolato a un linguaggio di scripting, puoi farlo in C # con

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

Puoi importare stringhe REG_SZ su più righe che contengono rotture di fine riga (EF) di ritorno a capo (CR) e fine riga (EF) nel registro utilizzando i file .reg purché non ti dispiaccia tradurre il testo come UTF-16LE dati codificati esadecimali. Per importare un REG_SZ con questo testo:

1st Line
2nd Line

È possibile creare un file chiamato MULTILINETEXT.REG che contiene questo:

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

Per codificare ASCII in UTF-16LE, è sufficiente aggiungere un byte null seguendo ciascun valore del codice ASCII. I valori REG_SZ devono terminare con un carattere null (, 00,00 ) nella notazione UTF-16LE.

Importa la modifica del registro nel file batch REG.EXE IMPORT MULTILINETEXT.REG .

L'esempio utilizza la chiave di ambiente perché è conveniente, non perché è particolarmente utile aggiungere tali dati alle variabili di ambiente. Si può usare RegEdit per verificare che i dati REG_SZ importati contengano i caratteri CRLF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top