C # - импортировать reg-файл в реестр без окна подтверждения пользователя - PullRequest
30 голосов
/ 31 января 2010

C # winforms - Как я могу импортировать файл reg в реестр? Следующий код отображает окно подтверждения для пользователя (да / нет).

Process regeditProcess = Process.Start("key.reg", "/S /q"); // not working
regeditProcess.WaitForExit(); 

Ответы [ 4 ]

45 голосов
/ 31 января 2010

Отправить файл в качестве параметра на regedit.exe:

Process regeditProcess = Process.Start("regedit.exe", "/s key.reg");
regeditProcess.WaitForExit();
12 голосов
/ 06 октября 2012

Код в ответе 2 правильный, но не полный. Это будет работать, когда каталог, в который вы ссылаетесь, не имеет пробелов в пути / файле, который вы ссылаетесь на пример C: \ ProgramFiles \ key.reg, будет работать нормально, но C: \ Program Files \ key.reg НЕ БУДЕТ РАБОТАТЬ потому что в пути есть пробелы.

Решение:

string directory= @"C:\Program Files (x86)\key.reg";
Process regeditProcess = Process.Start("regedit.exe", "/s \"" + directory + "\"");
regeditProcess.WaitForExit();
7 голосов
/ 03 июня 2015

Я пытался вызвать RegEdit, но каждый раз получал запрос на подтверждение (UAC включен, без повышенных разрешений) Вместо RegEdit я рекомендую "reg.exe" (который входит в Windows начиная с 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();
            }

Нет диалогов, нет подсказок.

Команда выглядит примерно так: "reg import path / to / the / reg.reg"

6 голосов
/ 31 января 2010

Вместо выполнения файла .reg вы сможете вносить изменения в реестр, используя функциональность, предоставленную в пространстве имен Microsoft.Win32.

Довольно просто создать раздел реестра , используя этот API:

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

Если вам не нужно создавать массовую загрузку новых ключей, я считаю, что API - это более масштабируемый и обслуживаемый подход. Если в какой-то момент вам понадобится сделать необязательным запись ваших настроек в общесистемной или пользовательской ветви реестра, большая часть вашего кода будет использоваться повторно в обоих случаях. Просто выберите другой ключ, чтобы внести изменения.

Может быть, более важно, API позволяет точно указать (в коде), как обрабатывать случаи, когда вставляемый ключ (ключи) уже существует в реестре. Должен ли я удалить существующие ключи и вставить мои, обновить значения в существующих ключах, игнорировать или вызвать исключение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...