How to get cross-platform system model name with .NET 5?

Viewed 223

I'm developing a cross-platform application in C# / NET 5, it will run on both Windows and MacOS. I need to print the "manufacturer model name" of the running system. On Windows, this is more or less what is returned by querying the WMI class Win32_ComputerSystem. For example the "Name" field:

  Caption:  Computer System Product
  Description:  Computer System Product
  IdentifyingNumber:  <hidden>
  Name:  Inspiron 7370  **<--- I need to print this kind of info!**
  UUID:  <hidden>
  Vendor:  Dell Inc.
  Version:  

The software will run also on MacOS, so I need a common way to retrieve, example, "Apple Mac Mini" or similar string. I assume it won't be possible to get it via WMI.

Is there a cross-platform solution? Thanks

1 Answers

I've "solved" by branching between the different OS and without needing to use System.Management package:

public static string GetSystemModelName()
{
    var cmd = new ProcessStartInfo();
    cmd.RedirectStandardError = true;
    cmd.CreateNoWindow = true;
    cmd.UseShellExecute = false;
    cmd.RedirectStandardOutput = true;

    if (System.OperatingSystem.IsWindows())
    {
        cmd.FileName = "CMD.exe";
        cmd.Arguments = "/C wmic csproduct get name | find /v \"Name\"";
    }
    else if (System.OperatingSystem.IsMacOS())
    {
        cmd.FileName = "sh";
        cmd.Arguments = "-c \"sysctl -n hw.model\"";
    }
    else return null;

    try
    {

        var builder = new StringBuilder();
        using (Process process = Process.Start(cmd))
        {
            process.WaitForExit();
            builder.Append(process.StandardOutput.ReadToEnd());
        }

        return builder.ToString().Trim();
    }
    catch (Exception)
    {
        return null;
    }
}
Related