2013-05-01 88 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'塊中放置一個斷點並查看異常情況。 – 2013-05-01 11:04:33

+0

我爲異常創建了一個對象,並試圖在消息框中顯示它(如果存在)。沒有例外 – 2013-05-01 11:11:21

+0

請您發佈註冊表項名稱的示例,例如,您是否使用「HKLM」或「HKEY_LOCAL_MACHINE」,您是否確實擁有足夠的權限來訪問註冊表項 – 2013-05-01 11:15:07

回答

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

您的代碼與我給出的 – 2013-05-01 11:25:21

+0

相同,對不起,我再次修改它,只是在「/ e」參數之後添加一個空格 – 2013-05-01 11:26:08

+1

該代碼仍然不起作用。註冊表仍然沒有被導出。 – 2013-05-01 11:33:51

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 
     } 
    }