2

我想使用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 文件的情况下直接写入注册表?

4

2 回答 2

1

读取和写入注册表

此代码在 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();
}
于 2013-09-23T15:12:00.467 回答
1

如果操作失败, Registry.CurrentUser.OpenSubKey将返回null,然后您将此值分配给RKOutlook并尝试访问.OpenSubKey(可能是您得到异常的原因)。

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

  if (RKOutlook != null && RKOutlook.OpenSubKey(user@domain.com) == null)
  {
     RKOutlook.CreateSubKey(user@domain.com);
     RKOutlook = RKOutlook.OpenSubKey(user@domain.com, true);
  }
于 2013-09-23T15:05:14.110 回答