c# - 如何获取与linux/windows兼容的硬盘序列号

标签 c# asp.net-core

有没有办法独立于操作系统获取主硬盘序列号? 在 Windows 中使用 WMI 或 DllImport 非常容易,但我找不到任何有关 linux 的文档。 或者有没有办法获得跨平台唯一的机器ID? 附:我不关心虚拟机克隆

最佳答案

在 Linux 终端中,您可以使用以下命令来获取硬盘的序列号。

udevadm info --query=all --name=/dev/sda | grep ID_SERIAL 

其中 /dev/sda 通常是主 HDD。

您可以使用如下静态函数来调用 Bash

public static string Bash(this string cmd)
{
    var escapedArgs = cmd.Replace("\"", "\\\"");

    var process = new Process()
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "/bin/bash",
            Arguments = $"-c \"{escapedArgs}\"",
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true,
        }
    };
    process.Start();
    string result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    return result;
}

然后执行

var output = "udevadm info --query=all --name=/dev/sda | grep ID_SERIAL".Bash();

关于c# - 如何获取与linux/windows兼容的硬盘序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54325155/

相关文章:

c# - 将 Stream 转换为 Image 时参数无效异常

c# - 如何创建元组数组?

c# 5 异步作为糖语法(或不是)?

c# - 在 .NET Core EF 中,为什么使用 .Select() 时 Query 运行速度比使用 ToListAsync() 快得多?

ASP.Net Core静态文件安全(特别是图像)

c# - 理论上按顺序执行 Xunit 测试(不是并行)

c# - 'Newtonsoft.Json.JsonConvert.DeserializeObject(string)' 有一些无效参数

c# - 仅在 .Net 中证书身份验证失败并出现 SSL 错误

C# 语法 - 变量名后的冒号

c# - 无法解析 ApplicationDbContext 中类型的服务