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