前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET Core 读写Windows注册表

.NET Core 读写Windows注册表

作者头像
Edi Wang
发布2019-07-08 19:36:29
1.9K0
发布2019-07-08 19:36:29
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客

是的,你没看错!这完全有可能!即使 .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为例(因为它不要求管理员权限)

代码语言:javascript
复制
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\edi_wang"))
{
    key.SetValue("Title", $".NET Core Rocks! {DateTime.UtcNow:MM/dd/yyyy-HHmmss}");
}

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

读注册表

代码语言:javascript
复制
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\edi_wang"))
{
    if (key != null)
    {
        Object o = key.GetValue("Title");
        Console.WriteLine(o.ToString());
    }
}

得到结果

检查平台

我们知道这样的代码只能跑在Windows下。所以在常规实践里,我们需要判断当前操作系统的类型,以免两行泪。

代码语言:javascript
复制
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    // Registry Code
}

最后,本文的代码已放在我的GitHub:https://github.com/EdiWang/DotNet-Samples/tree/master/NetCoreRegistry

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档