• .NET Core 读写Windows注册表
  • 发布于 2个月前
  • 460 热度
    0 评论
是的,你没看错!这完全有可能!即使 .NET Core 被设计为跨平台,但这并不意味着无法使用特定于平台的API。以 Windows 注册表为例,尽管.NET Standard 不能包含这样的API。但是,仍有一种办法可以在.NET Core 应用程序中使用 Windows 注册表。

但首先,你必须清楚,使用特定于平台的 API (如 Windows 注册包) 将使您的应用程序或这部分代码 只能跑在Windows上。

Microsoft.Win32.Registry

操作Windows注册表的API被包含在这个包里:Microsoft.Win32.Registry。它是Windows Compatibility Pack的一部分,这货是用来帮助开发人员逐渐将传统.NET Framework应用迁移到.NET Core的全家桶。
将它安装到你的.NET Core工程里:
dotnet add package Microsoft.Win32.Registry

它包含了这些类型:
Microsoft.Win32.RegistryKey
Microsoft.Win32.Registry
Microsoft.Win32.RegistryValueKind
Microsoft.Win32.RegistryHive
Microsoft.Win32.RegistryView

别忘了引入命名空间
using Microsoft.Win32;

写注册表
以HKEY_CURRENT_USER为例(因为它不要求管理员权限)
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\dalbll"))
{
    key.SetValue("Title", $".NET Core Rocks! {DateTime.UtcNow:MM/dd/yyyy-HHmmss}");
}

这段代码会在HKEY_CURRENT_USER\Software下创建一个名为dalbll的值,并且创建一个名为Title,值为.NET Core Rocks! 03/04/2019-073320的字符串。

读注册表
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\edi_wang"))
{
    if (key != null)
    {
        Object o = key.GetValue("Title");
        Console.WriteLine(o.ToString());
    }
}

得到结果

检查平台
我们知道这样的代码只能跑在Windows下。所以在常规实践里,我们需要判断当前操作系统的类型,以免两行泪。
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    // Registry Code
}

用户评论