如何使用Microsoft.Win32.Registry C#创建注册表项

时间:2013-09-23 15:01:52

标签: c# windows winapi outlook registry

我想使用Microsoft.Win32.Registry直接写入注册表。我可以这样做是一个reg文件,如:

swreg = File.AppendText(strRegPath); //Opens the file:

swreg.WriteLine(@"[HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts\user@domain.com");
swreg.WriteLine("\"DCEmail\"=dword:00000002");
swreg.WriteLine("\"POP3 Server\"=\"10.0.0.200\""); 
swreg.WriteLine("\"POP3 Port\"=dword:0000006e");

这会创建一个reg文件,我可以执行创建reg键的文件。我尝试使用类似Microsoft.Win32.Registry的类似内容:

var RKOutlook = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts");

if (RKOutlook.OpenSubKey("user@domain.com") == null)
{
    RKOutlook.CreateSubKey("user@domain.com");
    RKOutlook = RKOutlook.OpenSubKey("user@domain.com", true);
}

但是我收到System.NullReferenceException was unhandled错误。如何在不使用reg文件的情况下直接写入注册表?

2 个答案:

答案 0 :(得分:1)

如果操作失败,

Registry.CurrentUser.OpenSubKey将返回null,然后您将此值分配给RKOutlook并尝试访问.OpenSubKey(可能是您获得例外的原因)。< / p>

在尝试访问null方法之前,您还应该检查对象是否为OpenSubKey

  if (RKOutlook != null && RKOutlook.OpenSubKey(user@domain.com) == null)
  {
     RKOutlook.CreateSubKey(user@domain.com);
     RKOutlook = RKOutlook.OpenSubKey(user@domain.com, true);
  }

答案 1 :(得分:1)

Reading from and writing to Registry

此代码在VB.NET中,但可以转换为C# 以下代码显示如何从HKEY_CURRENT_USER读取字符串。

Microsoft.Win32.RegistryKey regVersion = null;
dynamic keyValue = "Software\\Microsoft\\TestApp\\1.0";
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyValue, false);
int intVersion = 0;
if (regVersion != null) {
    intVersion = regVersion.GetValue("Version", 0);
    regVersion.Close();
}

以下代码读取,递增,然后将字符串写入HKEY_CURRENT_USER。

var regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0", true);
if (regVersion == null) {
    // Key doesn't exist; create it.
    regVersion = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0");
}

int intVersion = 0;
if (regVersion != null) {
    intVersion = regVersion.GetValue("Version", 0);
    intVersion = intVersion + 1;
    regVersion.SetValue("Version", intVersion);
    regVersion.Close();
}
相关问题