弘帝企业智能建站系统交流平台

 找回密码
 立即注册
查看: 1254|回复: 0

C#获取不同平台机器的函数GetMachine()

[复制链接]
发表于 2023-10-17 11:16:35 | 显示全部楼层 |阅读模式
Windows 平台

using System.Management;
public string GetMachine()
{
var mc = new ManagementClass("Win32_ComputerSystemProduct");
var moc = mc.GetInstances();
var machine = string.Empty;
foreach (var mo in moc)
{
machine = mo.Properties["UUID"].Value.ToString();
break;
}
return machine;
}
该方法使用 WMI(Windows Management Instrumentation)获取计算机信息,其中使用到了
Win32_ComputerSystemProduct 类,它代表计算机系统中安装的产品。

Linux 平台

public string GetMachine()
{
var file = new System.IO.FileInfo("/etc/machine-id");
if (file.Exists)
{
using (var fs = file.OpenRead())
{
using (var reader = new System.IO.StreamReader(fs))
{
return reader.ReadToEnd().Trim();
}
}
}
else
{
return string.Empty;
}
}
在 Linux 平台上,我们可以使用 /etc/machine-id 文件来获取机器的唯一标识。该文件中包含了一个 32 字节的十六进制字符串,可以作为机器的唯一标识码。

macOS 平台

public string GetMachine()
{
var command = new System.Diagnostics.ProcessStartInfo
{
FileName = "/usr/sbin/system_profiler",
Arguments = "-detailLevel mini SPHardwareDataType",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
var process = System.Diagnostics.Process.Start(command);
var output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
var machine = string.Empty;
foreach (var line in output.Split('\n'))
{
if (line.Contains("Hardware UUID:"))
{
machine = line.Trim().Split(':')[1].Trim();
break;
}
}
return machine;
}
在 macOS 平台上,我们可以使用 system_profiler 命令来获取机器信息。该命令可以输出系统硬件、软件、网络等各方面的信息,我们使用它来获取机器的唯一标识码,即 Hardware UUID。

苹果手机(iOS)

iOS 提供了一个称为 identifierForVendor 的属性,它是一个唯一标识符(UUID),与设备相关联,并且在同一供应商的所有应用程序中相同。你可以使用以下代码获取该标识符:

using UIKit;
public string GetMachine()
{
var identifier = UIDevice.CurrentDevice.IdentifierForVendor?.AsString();
if (!string.IsNullOrEmpty(identifier))
{
return identifier;
}
else
{
return string.Empty;
}
}
Android 设备

获取 Android 设备的唯一标识,也就是通常所说的设备 ID。在 Android 系统中,有两种方式可以获取设备 ID。

通过 Android 应用程序框架提供的 API 获取。具体来说,你可以使用以下代码:

var tm = (TelephonyManager)GetSystemService(TelephonyService);
string deviceId = tm.DeviceId;
GetMachine()

using Android.Content;
using Android.Provider;

public string GetMachine(Context context)
{
    string machine = string.Empty;
   
    try
    {
        string androidId = Settings.Secure.GetString(context.ContentResolver, Settings.Secure.AndroidId);
        
        if (!string.IsNullOrEmpty(androidId))
        {
            machine = androidId;
        }
    }
    catch (Exception ex)
    {
        // 处理异常
    }

    return machine;
}
TelephonyManager 是一个代表手机设备的类,其中 DeviceId 属性返回设备的唯一标识,通常为 IMEI 号。但是需要注意的是,不是所有的 Android 设备都有 IMEI 号码,所以 DeviceId 属性可能会返回 null。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|弘帝企业智能建站系统 ( 皖ICP备07503252号 )

GMT+8, 2024-11-27 16:08 , Processed in 0.048246 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表