2013-05-01 3 views
2

Я пытался экспортировать и сохранять файлы реестра в произвольном месте, код работает. Однако при указании пути и сохранения функция не работает и реестр не экспортируется. Также не отображается ошибка.Как экспортировать реестр в C#

private static void Export(string exportPath, string registryPath) 
{ 
    string path = "\""+ exportPath + "\""; 
    string key = "\""+ registryPath + "\""; 
    // string arguments = "/e" + path + " " + key + ""; 
    Process proc = new Process(); 

    try 
    { 
     proc.StartInfo.FileName = "regedit.exe"; 
     proc.StartInfo.UseShellExecute = false; 
     //proc.StartInfo.Arguments = string.Format("/e", path, key); 

     proc = Process.Start("regedit.exe", "/e" + path + " "+ key + ""); 
     proc.WaitForExit(); 
    } 
    catch (Exception) 
    { 
     proc.Dispose(); 
    } 
} 
+2

Вы попадаете в исключение, а затем не показываете его и не регистрируете, поэтому я не ожидал, что ошибка не будет показана. Вы могли бы по крайней мере изменить catch на 'Exception e' и вставить' Console.WriteLine (e.Message) 'там. Или, если вы отлаживаете, просто поместите контрольную точку внутри блока catch и посмотрите, что говорит об исключении. –

+0

Я создал объект для исключения и попытался отобразить его в окне сообщения, если он есть. Никаких исключений не показывается –

+0

Не могли бы вы разместить образец для имени ключа реестра, например, используете ли вы «HKLM» или «HKEY_LOCAL_MACHINE», также уверены, что у вас есть достаточно разрешений для доступа к разделам реестра –

ответ

4

Вам нужно добавить пробел после /e параметров, так что ваш код будет:

private static void Export(string exportPath, string registryPath) 
{ 
    string path = "\""+ exportPath + "\""; 
    string key = "\""+ registryPath + "\""; 
    Process proc = new Process(); 

    try 
    { 
     proc.StartInfo.FileName = "regedit.exe"; 
     proc.StartInfo.UseShellExecute = false; 

     proc = Process.Start("regedit.exe", "/e " + path + " "+ key); 
     proc.WaitForExit(); 
    } 
    catch (Exception) 
    { 
     proc.Dispose(); 
    } 
} 
+0

Ваш код такой же, как я дал –

+0

Извините, я его снова модифицировал, просто добавьте пробел после параметра «/ e» –

+1

Код по-прежнему не работает. Реестр по-прежнему не экспортируется. –

2

regedit.exe требует повышенных привилегий. reg.exe - лучший выбор. Это не требует никакого повышения.

Вот что мы делаем.

void exportRegistry(string strKey, string filepath) 
    { 
     try 
     { 
      using (Process proc = new Process()) 
      { 
       proc.StartInfo.FileName = "reg.exe"; 
       proc.StartInfo.UseShellExecute = false; 
       proc.StartInfo.RedirectStandardOutput = true; 
       proc.StartInfo.RedirectStandardError = true; 
       proc.StartInfo.CreateNoWindow = true; 
       proc.StartInfo.Arguments = "export \"" + strKey + "\" \"" + filepath + "\" /y"; 
       proc.Start(); 
       string stdout = proc.StandardOutput.ReadToEnd(); 
       string stderr = proc.StandardError.ReadToEnd(); 
       proc.WaitForExit(); 
      } 
     } 
     catch (Exception ex) 
     { 
      // handle exception 
     } 
    } 
Смежные вопросы