Majipro.Hwid
1.0.0
dotnet add package Majipro.Hwid --version 1.0.0
NuGet\Install-Package Majipro.Hwid -Version 1.0.0
<PackageReference Include="Majipro.Hwid" Version="1.0.0" />
<PackageVersion Include="Majipro.Hwid" Version="1.0.0" />
<PackageReference Include="Majipro.Hwid" />
paket add Majipro.Hwid --version 1.0.0
#r "nuget: Majipro.Hwid, 1.0.0"
#:package Majipro.Hwid@1.0.0
#addin nuget:?package=Majipro.Hwid&version=1.0.0
#tool nuget:?package=Majipro.Hwid&version=1.0.0
HWID
Cross-platform library for obtaining a unique hardware identifier.
What it is
This library is used to get unique hardware identifier. Such an identifier should be immutable until some significant hardware changes will not occur. It works on Windows, OSX and Linux (however, here you will need to have permissions). It runs a process behind the scenes that tries to fetch unique hardware identifier, it parses the result and hashes the actual identifier. If you are not satisfied with used strategies to fetch hardware identifier, you can write your own using this library as well. The whole implementation is built around Dependency Injection, so if you are not using it, you will most probably not appreciate this library.
How to register it
The basic registration is as follows:
builder.Services.AddHwid();
You can enhance this registration by providing your own implementation of IHardwareIdentifierFetcher interface, which allows you to apply custom strategy how hardware identifier is fetched:
builder.Services.AddHwid(w => w
.AddProvisionService<CustomHwidWindowsProvisionService>()
.AddProvisionService<CustomHwidLinuxProvisionService>());
You can also define custom settings, such as process timeout:
services.AddHwid(o => o.ProcessTimeout = TimeSpan.FromSeconds(10));
How to get hardware identifier
You simply inject IHwidAccessorService service and call:
string hwid = _hwidAccessorService.GetHwid();
Optionally, you can use async overload:
string hwid = await _hwidAccessorService.GetHwidAsync();
Service is registered as singleton and caching the result, so you will have to call the IHardwareIdentifierFetcher just once, in other calls the result from the first call will be used.
How to create custom IHwidAccessorService
In certain cases you maybe don't like how hardware identifier is fetched. For such cases you can create your own implementation:
internal sealed class CustomWindowsHwidProvisionService : IHwidProvisionService
{
public OSPlatform Platform { get; } = OSPlatform.Windows;
public string Command { get; } = "powershell";
public string[] Args { get; } = ["-Command \"(Get-WmiObject -Class Win32_ComputerSystemProduct).UUID\""];
public bool ParseHwidFromStdOut(string line, out string hwid)
{
if (string.IsNullOrWhiteSpace(line))
{
hwid = default;
return false;
}
hwid = line.Trim();
return true;
}
}
Do not forget to register it, see "How to register it" section above.
Current strategies to fetch hardware identifier
- Windows:
Get-WmiObject -Class Win32_ComputerSystemProduct).UUID - Linux:
cat /sys/class/dmi/id/product_uuid - OSX:
ioreg -rd1 -c IOPlatformExpertDevice
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 253 | 12/14/2025 |