2010-01-31 102 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