Comment ajouter une chaîne REG_SZ multiligne au registre à partir de la ligne de commande?

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

  •  03-07-2019
  •  | 
  •  

Question

Dans le cadre d'une installation de compilation sur une machine Windows, j'ai besoin d'ajouter une entrée de registre et j'aimerais le faire à partir d'un simple fichier de commandes.

L'entrée étant destinée à une application tierce, le format est corrigé.

L'entrée prend la forme d'une chaîne REG_SZ mais doit contenir des nouvelles lignes, par exemple. 0xOA comme séparateurs.

J'ai rencontré quelques problèmes.

La première tentative a utilisé regedit pour charger un fichier .reg généré. Cela a échoué car il ne semblait pas aimer ni les longues chaînes ni les chaînes avec des nouvelles lignes. J'ai découvert que l'exportation fonctionne correctement, l'importation échoue. J'ai pu tester l'export car l'application tierce ajoute des entrées similaires directement via l'API win32.

La deuxième tentative a utilisé la commande REG ADD mais je ne parviens pas à ajouter les caractères de nouvelle ligne. Tout ce que j'essaie se termine par l'ajout d'une chaîne littérale.

Était-ce utile?

La solution

Vous pouvez créer un fichier VBScript (.vbs) et l’appeler à partir d’un fichier de traitement par lots, en supposant que vous exécutiez dans le lot des opérations autres que ce changement de registre. Dans vbscript, vous regarderiez quelque chose comme:

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

Vous devriez pouvoir trouver les valeurs de types possibles à l'aide de Google.

Autres conseils

Si vous n'êtes pas contraint à un langage de script, vous pouvez le faire en C # avec

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

Vous pouvez importer des chaînes REG_SZ multilignes contenant des retours à la ligne (CR) et des sauts de ligne (LF) en fin de ligne (EOL) dans le registre à l'aide de fichiers .reg, à condition que le fait de traduire le texte en UTF-16LE ne vous gêne pas données codées hexadécimales. Pour importer un REG_SZ avec ce texte:

1st Line
2nd Line

Vous pouvez créer un fichier nommé MULTILINETEXT.REG contenant:

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

Pour coder ASCII en UTF-16LE, ajoutez simplement un octet nul après chaque valeur de code ASCII. Les valeurs REG_SZ doivent se terminer par un caractère nul (, 00,00 ) en notation UTF-16LE.

Importez la modification du registre dans le fichier de commandes REG.EXE IMPORT MULTILINETEXT.REG .

L'exemple utilise la clé Environment parce que c'est pratique, pas parce qu'il est particulièrement utile d'ajouter de telles données aux variables d'environnement. RegEdit peut être utilisé pour vérifier que les données REG_SZ importées contiennent les caractères CRLF.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top