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。