C# - importer le fichier reg dans le registre sans la boîte de confirmation de l'utilisateur
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
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();
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?
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"