如何使用 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
错误。如何在不使用注册文件的情况下直接写入注册表?
读取和写入注册表
此代码是 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);
}