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

本文关键字:创建 注册表 Registry 何使用 Microsoft Win32 | 更新日期: 2023-09-27 18:32:22

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

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错误。如何在不使用注册文件的情况下直接写入注册表?

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

读取和写入注册表

此代码是 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();
}

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

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

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