如何检查.NET注册表在.NET Core应用程序中是否可用?

时间:2016-12-08 16:23:08

标签: c# registry .net-core

我的.NET核心库需要从注册表中读取一些信息(如果可用)或保留默认值(如果不可用)。我想了解这样做的最佳实践。

我想我可以在try / catch中包装注册表初始化/使用块,或者我可以检查当前平台是否是Windows但我不认为这些是最佳实践(最好避免异常,并且不能保证任何基于Windows的平台都有注册表等。

目前,我将依赖

bool hasRegistry = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);

但想知道是否有更可靠/通用的解决方案。

1 个答案:

答案 0 :(得分:3)

使用RuntimeInformation.IsOSPlatform(OSPlatform.Windows)检查注册表就足够了。

如果某种Windows将没有注册表(如您在注释中所指出的),那么它很可能仍将具有新的OSPlatform属性...

您可以使用Microsoft的Windows Compatibility Pack来读取注册表。查看他们的示例...

private static string GetLoggingPath()
{
    // Verify the code is running on Windows.
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement"))
        {
            if (key?.GetValue("LoggingDirectoryPath") is string configuredPath)
                return configuredPath;
        }
    }

    // This is either not running on Windows or no logging path was configured,
    // so just use the path for non-roaming user-specific data files.
    var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
    return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging");
}