С# winforms - Как импортировать файл reg
в реестр? Следующий код отображает окно подтверждения пользователю (да/нет).
Process regeditProcess = Process.Start("key.reg", "/S /q"); // not working
regeditProcess.WaitForExit();
С# winforms - Как импортировать файл reg
в реестр? Следующий код отображает окно подтверждения пользователю (да/нет).
Process regeditProcess = Process.Start("key.reg", "/S /q"); // not working
regeditProcess.WaitForExit();
Отправьте файл в качестве параметра regedit.exe
:
Process regeditProcess = Process.Start("regedit.exe", "/s key.reg");
regeditProcess.WaitForExit();
Код в ответе 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();
Я попытался вызвать 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"
Вместо выполнения файла .reg
вы можете внести свои изменения в реестр, используя функции, указанные в Microsoft.Win32
namespace.
Для создать раздел реестра довольно легко, используя этот API:
RegistryKey key = Registry.CurrentUser.CreateSubKey("Names");
key.SetValue("Name", "Isabella");
key.Close();
Если вам не нужно создавать массовую загрузку новых ключей, я считаю, что API является более масштабируемым и универсальным. Если в какой-то момент вам нужно будет сделать необязательным запись ваших настроек в общесистемной или отдельной ветки реестра, большая часть вашего кода будет повторно использоваться для обоих случаев. Просто выберите другой ключ, чтобы внести изменения.
Возможно, что более важно, API позволяет точно указать (в коде), как обрабатывать случаи, когда ключ (ключи), которые вы вставляете, уже существует в реестре. Должен ли я удалять существующие ключи и вставлять мои данные, обновлять значения в существующих ключах, молча игнорировать или создавать исключение?