2010-01-31 75 views

回答

43

的文件作爲參數發送給regedit.exe

Process regeditProcess = Process.Start("regedit.exe", "/s key.reg"); 
regeditProcess.WaitForExit(); 

來源:http://www.mycsharpcorner.com/Post.aspx?postID=29

+0

我在找什麼,謝謝。 – 2010-01-31 11:29:31

+8

一個有用的提示,如果文件名包含空格,就像在命令行中一樣,確保文件名中包含引號。 – doobop 2010-10-06 22:08:35

6

而是執行.reg文件,你應該能夠使用,讓您更改註冊表功能在Microsoft.Win32命名空間中提供。

它使用這個API是很容易create a registry key

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

除非你需要創建一個新的密鑰的批量加載,我相信API是一個更具擴展性和maintable方法。如果在某些時候,您需要決定是否將您的設置寫入註冊表的系統範圍內或每個用戶分支,則大多數代碼都可以在兩種情況下重用。只需選擇另一個鍵即可進行更改。

也許更重要的是,API允許您準確指定(在代碼中)如何處理您要插入的關鍵字已經存在於註冊表中的情況。我應該刪除現有的密鑰並插入我的密鑰,更新現有密鑰內的值,默默忽略或引發異常?

+2

是否有什麼特別的原因,他應該使用API​​來代替它? – 2010-01-31 11:26:08

+1

假設OP需要安裝官方補丁,這是一個巨大的reg文件。總是有正當的理由去做事情。 – Kobi 2010-01-31 11:32:17

+1

我可以告訴是一個巨大的reg文件。多數民衆贊成在每個方式setValue可以在* ss的痛苦。 – 2010-01-31 11:40:56

12

答案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(); 
5

我試圖調用註冊表編輯器,但每次我得到一個提示窗口(UAC啓用,沒有提升的權限)。而不是RegEdit我推薦「reg.exe」(它自XP以來包含在Windows中)

  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」

+0

警告:一旦您在[Virustotal](http://virustotal.com)中使用此方法掃描您的應用程序,將會出現名爲** HEUR/QVM03.0.0000.Malware.Gen **的惡意軟件。 – newbieguy 2016-06-01 02:57:52