How should I gather Hardware Info if System.Management.dll
is not compatible with Dot Net Core.
How do I get the Machine info like Processor Id, Disk Volume number etc.
How should I gather Hardware Info if System.Management.dll
is not compatible with Dot Net Core.
How do I get the Machine info like Processor Id, Disk Volume number etc.
.NET Core 3 now supports System.Management. As of this time, .NET Core 3 is in preview mode with preview 4 as the most current.
You will have to select the Manage NuGet packages... menu item under the Project menu in Visual Studio to install the latest version of System.Management. Make sure that the include previews checkbox is selected so that you will install the latest version.
The previous version of System.Management throws an error:
"Cannot marshal a string by-value with the [Out] attribute..."
See this link for more info about the error.
I am currently porting a Net Framework project that uses System.Management
to get some hardware info, and I also got to a dead end because System.Management
is not compatible with Net Core.
The workaround I found was to use Process.Start
from System.Diagnostics
to execute powershell commands to get that information, for instance, to get the motherboard serial number you can use the command Get-WmiObject Win32_BaseBoard | select SerialNumber
, you can then change the command to process the output and only have the serial number, or even process the output programatically.
You can also add some ifs
, that depending on the current OS you can provide to the Process.Start
specific OS commands, for instance, for linux you would need to process a dmidecode related command.
The only negative side in this approach is that its A LOT SLOWER whem compared with System.Management
.
You need to install Microsoft.Windows.Compatibility
in your .Net core project to be able to reference System.Management.dll
.
I found this issue while upgrading from .NetFramework to .NetCore 3.0
.NetFramework compatible System.Management won't work for the dotnet core, so to fix the issue just add a .Net core compatible System.Management nuget.
At this point the latest available version is 4.6.0 https://www.nuget.org/packages/System.Management/4.6.0 and latest preview is 4.7.0-preview3.19551.4