C# - importer le fichier reg dans le registre sans la boîte de confirmation de l'utilisateur

C# winforms - Comment puis-je importer un reg fichier dans le registre? Le code suivant affiche une case de confirmation à l'utilisateur (oui/non).

Process regeditProcess = Process.Start("key.reg", "/S /q"); // not working
regeditProcess.WaitForExit(); 
27
demandé sur Kobi 2010-01-31 14:09:06

4 réponses

envoyer le fichier comme paramètre à regedit.exe:

Process regeditProcess = Process.Start("regedit.exe", "/s key.reg");
regeditProcess.WaitForExit();
http://www.mycsharpcorner.com/Post.aspx?postID=29

43
répondu Kobi 2010-01-31 11:18:02

le code de la réponse 2 est correct, mais il n'est pas complet. Cela fonctionnera lorsque le répertoire auquel vous faites référence n'a pas d'espacement dans le chemin / le fichier auquel vous faites référence. C:\ProgramFiles\key.reg va bien marcher, mais C:\Program fichiers\key.reg ne fonctionne PAS parce qu'il y a des espaces dans le chemin.

la solution:

string directory= @"C:\Program Files (x86)\key.reg";
Process regeditProcess = Process.Start("regedit.exe", "/s \"" + directory + "\"");
regeditProcess.WaitForExit();
12
répondu ses 2013-12-05 16:57:18

au lieu d'exécuter un .reg fichier, vous devriez être en mesure d'apporter vos modifications au registre en utilisant la fonctionnalité fournie dans le Microsoft.Win32 espace de noms.

Il est assez facile d' créer une clé de registre utilisation de cette API:

RegistryKey key = Registry.CurrentUser.CreateSubKey("Names");
key.SetValue("Name", "Isabella");
key.Close();

à moins que vous n'ayez besoin de créer une masse de nouvelles clés, je crois que l'API est une approche plus évolutive et maintenable. Si à un moment donné, vous devez décider de le rendre optionnel pour écrire vos paramètres dans le à l'échelle du système ou par l'utilisateur branche du registre, la plupart de votre code sera réutilisable pour les deux cas. Il suffit de choisir une autre clé pour effectuer les changements.

peut-être plus important, L'API vous permet de spécifier exactement (dans le code) comment gérer les cas où la(Les) clé (s) que vous insérez existe déjà dans le registre. Devrais-je supprimer les touches existantes et insérer la mienne, mettre à jour les valeurs dans les touches existantes, ignorer ou soulever une exception silencieusement?

6
répondu Jørn Schou-Rode 2010-01-31 11:41:20

j'ai essayé D'invoquer RegEdit, mais à chaque fois j'ai eu une invite de confirmation (UAC activée, pas de permissions élevées). Au lieu de RegEdit je recommande " reg.exe" (qui est inclus dans Windows depuis XP)

            Process proc = new Process();

            try
            {
                proc.StartInfo.FileName = "reg.exe";
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.UseShellExecute = false;

                string command = "import " + path;
                proc.StartInfo.Arguments = command;
                proc.Start();

                proc.WaitForExit();
            }
            catch (System.Exception)
            {
                proc.Dispose();
            }

Pas de dialogue, pas d'invite.

La commande est quelque chose comme "reg import chemin/vers/le/reg.reg"

5
répondu Robert Muehsig 2015-06-03 06:55:24