309 lines
12 KiB
C#
309 lines
12 KiB
C#
using NLog;
|
|
using System.Management;
|
|
|
|
namespace MP.MONO.Core
|
|
{
|
|
/// <summary>
|
|
/// Gestione info macchina
|
|
/// </summary>
|
|
public class MachineInfo
|
|
{
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// Restitusice info richieste
|
|
/// </summary>
|
|
/// <param name="infoType"></param>
|
|
/// <returns></returns>
|
|
public static async Task<Dictionary<string, string>> GetInfo(string infoType)
|
|
{
|
|
var outInfo = new Dictionary<string, string>();
|
|
switch (infoType)
|
|
{
|
|
case "BIOS":
|
|
outInfo = await GetBiosInfo();
|
|
break;
|
|
|
|
case "CPU":
|
|
outInfo = await GetCpuInfo();
|
|
break;
|
|
|
|
case "NET":
|
|
outInfo = await GetNetInfo();
|
|
break;
|
|
|
|
case "OS":
|
|
outInfo = await GetOsInfo();
|
|
break;
|
|
|
|
case "RAM":
|
|
outInfo = await GetRamInfo();
|
|
break;
|
|
|
|
case "VOL":
|
|
outInfo = await GetVolumeInfo();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return outInfo;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Private Fields
|
|
|
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Private Methods
|
|
|
|
/// <summary>
|
|
/// Info BIOS
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static async Task<Dictionary<string, string>> GetBiosInfo()
|
|
{
|
|
ManagementObjectCollection moc;
|
|
Dictionary<string, string> DictParam = new Dictionary<string, string>();
|
|
|
|
try
|
|
{
|
|
moc = new ManagementObjectSearcher("select * from Win32_BIOS").Get();
|
|
}
|
|
catch
|
|
{
|
|
Log.Error("Error: WMI API Not loaded.");
|
|
return DictParam;
|
|
}
|
|
|
|
foreach (ManagementObject obj in moc)
|
|
{
|
|
searchWmiParam(DictParam, obj, "Manufacturer", "Manufacturer");
|
|
searchWmiParam(DictParam, obj, "ReleaseDate", "ReleaseDate");
|
|
searchWmiParam(DictParam, obj, "SMBIOSBIOSVersion", "SMBIOSBIOSVersion");
|
|
searchWmiParam(DictParam, obj, "SMBIOSMajorVersion", "SMBIOSMajorVersion");
|
|
searchWmiParam(DictParam, obj, "SMBIOSMinorVersion", "SMBIOSMinorVersion");
|
|
searchWmiParam(DictParam, obj, "SoftwareElementID", "SoftwareElementID");
|
|
searchWmiParam(DictParam, obj, "SoftwareElementState", "SoftwareElementState");
|
|
searchWmiParam(DictParam, obj, "SystemBiosMajorVersion", "SystemBiosMajorVersion");
|
|
searchWmiParam(DictParam, obj, "SystemBiosMajorVersion", "SystemBiosMajorVersion");
|
|
searchWmiParam(DictParam, obj, "SystemBiosMinorVersion", "SystemBiosMinorVersion");
|
|
searchWmiParam(DictParam, obj, "BiosVersion", "Version");
|
|
}
|
|
await Task.Delay(1);
|
|
return DictParam;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Info processore
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static async Task<Dictionary<string, string>> GetCpuInfo()
|
|
{
|
|
ManagementObjectCollection moc;
|
|
Dictionary<string, string> DictParam = new Dictionary<string, string>();
|
|
|
|
try
|
|
{
|
|
moc = new ManagementObjectSearcher("select * from Win32_Processor").Get();
|
|
}
|
|
catch
|
|
{
|
|
Log.Error("Error: WMI API Not loaded.");
|
|
return DictParam;
|
|
}
|
|
|
|
foreach (ManagementObject obj in moc)
|
|
{
|
|
searchWmiParam(DictParam, obj, "AddressWidth", "AddressWidth");
|
|
searchWmiParam(DictParam, obj, "Architecture", "Architecture");
|
|
searchWmiParam(DictParam, obj, "CurrentClockSpeed", "CurrentClockSpeed");
|
|
searchWmiParam(DictParam, obj, "CurrentVoltage", "CurrentVoltage");
|
|
searchWmiParam(DictParam, obj, "DataWidth", "DataWidth");
|
|
searchWmiParam(DictParam, obj, "Description", "Description");
|
|
searchWmiParam(DictParam, obj, "ExtClock", "ExtClock");
|
|
searchWmiParam(DictParam, obj, "Family", "Family");
|
|
searchWmiParam(DictParam, obj, "L2CacheSize", "L2CacheSize");
|
|
searchWmiParam(DictParam, obj, "L3CacheSize", "L3CacheSize");
|
|
searchWmiParam(DictParam, obj, "Level", "Level");
|
|
searchWmiParam(DictParam, obj, "LoadPercentage", "LoadPercentage");
|
|
searchWmiParam(DictParam, obj, "Manufacturer", "Manufacturer");
|
|
searchWmiParam(DictParam, obj, "NumberOfCores", "NumberOfCores");
|
|
searchWmiParam(DictParam, obj, "NumberOfLogicalProcessors", "NumberOfLogicalProcessors");
|
|
searchWmiParam(DictParam, obj, "ProcessorId", "ProcessorId");
|
|
searchWmiParam(DictParam, obj, "ProcessorType", "ProcessorType");
|
|
searchWmiParam(DictParam, obj, "Revision", "Revision");
|
|
searchWmiParam(DictParam, obj, "Role", "Role");
|
|
searchWmiParam(DictParam, obj, "SocketDesignation", "SocketDesignation");
|
|
searchWmiParam(DictParam, obj, "SystemName", "SystemName");
|
|
searchWmiParam(DictParam, obj, "CpuVersion", "Version");
|
|
}
|
|
await Task.Delay(1);
|
|
return DictParam;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Info Networking
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static async Task<Dictionary<string, string>> GetNetInfo()
|
|
{
|
|
ManagementObjectCollection moc;
|
|
Dictionary<string, string> DictParam = new Dictionary<string, string>();
|
|
|
|
try
|
|
{
|
|
moc = new ManagementObjectSearcher("select * from Win32_NetworkAdapter WHERE NetEnabled = 'true'").Get();
|
|
}
|
|
catch
|
|
{
|
|
Log.Error("Error: WMI API Not loaded.");
|
|
return DictParam;
|
|
}
|
|
|
|
foreach (ManagementObject obj in moc)
|
|
{
|
|
searchWmiParam(DictParam, obj, "AdapterType", "AdapterType");
|
|
searchWmiParam(DictParam, obj, "Description", "Description");
|
|
searchWmiParam(DictParam, obj, "GUID", "GUID");
|
|
searchWmiParam(DictParam, obj, "MACAddress", "MACAddress");
|
|
searchWmiParam(DictParam, obj, "Manufacturer", "Manufacturer");
|
|
searchWmiParam(DictParam, obj, "Name", "Name");
|
|
searchWmiParam(DictParam, obj, "SystemName", "SystemName");
|
|
searchWmiParam(DictParam, obj, "PhysicalAdapter", "PhysicalAdapter");
|
|
searchWmiParam(DictParam, obj, "ProductName", "ProductName");
|
|
searchWmiParam(DictParam, obj, "ServiceName", "ServiceName");
|
|
}
|
|
await Task.Delay(1);
|
|
return DictParam;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Info OS
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static async Task<Dictionary<string, string>> GetOsInfo()
|
|
{
|
|
ManagementObjectCollection moc;
|
|
Dictionary<string, string> DictParam = new Dictionary<string, string>();
|
|
|
|
try
|
|
{
|
|
moc = new ManagementObjectSearcher("select * from Win32_OperatingSystem").Get();
|
|
}
|
|
catch
|
|
{
|
|
Log.Error("Error: WMI API Not loaded.");
|
|
return DictParam;
|
|
}
|
|
|
|
foreach (ManagementObject obj in moc)
|
|
{
|
|
searchWmiParam(DictParam, obj, "Caption", "Caption");
|
|
searchWmiParam(DictParam, obj, "Version", "Version");
|
|
searchWmiParam(DictParam, obj, "MaxNumberOfProcesses", "MaxNumberOfProcesses");
|
|
searchWmiParam(DictParam, obj, "MaxProcessMemorySize", "MaxProcessMemorySize");
|
|
searchWmiParam(DictParam, obj, "OSArchitecture", "OSArchitecture");
|
|
searchWmiParam(DictParam, obj, "SerialNumber", "SerialNumber");
|
|
searchWmiParam(DictParam, obj, "BuildNumber", "BuildNumber");
|
|
searchWmiParam(DictParam, obj, "RegisteredUser", "RegisteredUser");
|
|
}
|
|
await Task.Delay(1);
|
|
return DictParam;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Info RAM
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static async Task<Dictionary<string, string>> GetRamInfo()
|
|
{
|
|
ManagementObjectCollection moc;
|
|
Dictionary<string, string> DictParam = new Dictionary<string, string>();
|
|
|
|
try
|
|
{
|
|
moc = new ManagementObjectSearcher("select * from Win32_PhysicalMemory").Get();
|
|
}
|
|
catch
|
|
{
|
|
Log.Error("Error: WMI API Not loaded.");
|
|
return DictParam;
|
|
}
|
|
|
|
foreach (ManagementObject obj in moc)
|
|
{
|
|
searchWmiParam(DictParam, obj, "DeviceLocator", "DeviceLocator");
|
|
searchWmiParam(DictParam, obj, "DataWidth", "DataWidth");
|
|
searchWmiParam(DictParam, obj, "ConfiguredVoltage", "ConfiguredVoltage");
|
|
searchWmiParam(DictParam, obj, "FormFactor", "FormFactor");
|
|
searchWmiParam(DictParam, obj, "ConfiguredClockSpeed", "ConfiguredClockSpeed");
|
|
searchWmiParam(DictParam, obj, "MaxVoltage", "MaxVoltage");
|
|
searchWmiParam(DictParam, obj, "MinVoltage", "MinVoltage");
|
|
searchWmiParam(DictParam, obj, "Speed", "Speed");
|
|
searchWmiParam(DictParam, obj, "SMBIOSMemoryType", "SMBIOSMemoryType");
|
|
searchWmiParam(DictParam, obj, "PartNumber", "PartNumber");
|
|
}
|
|
await Task.Delay(1);
|
|
return DictParam;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Info Volumes (HDD/SSD)
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static async Task<Dictionary<string, string>> GetVolumeInfo()
|
|
{
|
|
ManagementObjectCollection moc;
|
|
Dictionary<string, string> DictParam = new Dictionary<string, string>();
|
|
|
|
try
|
|
{
|
|
moc = new ManagementObjectSearcher("select DriveLetter, DeviceID from Win32_Volume").Get();
|
|
}
|
|
catch
|
|
{
|
|
Log.Error("Error: WMI API Not loaded.");
|
|
return DictParam;
|
|
}
|
|
|
|
foreach (ManagementObject obj in moc)
|
|
{
|
|
// mi limito al disco "C:"
|
|
string sDrive = "DriveLetter";
|
|
var objVal = $"{obj[sDrive]}";
|
|
if (objVal == "C:")
|
|
{
|
|
searchWmiParam(DictParam, obj, "DeviceID", "DeviceID");
|
|
searchWmiParam(DictParam, obj, "DriveLetter", "DriveLetter");
|
|
}
|
|
}
|
|
await Task.Delay(1);
|
|
return DictParam;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua estrazione parametri WMI da elenco recuperato
|
|
/// </summary>
|
|
/// <param name="Processor"></param>
|
|
/// <param name="obj"></param>
|
|
/// <param name="pName"></param>
|
|
/// <param name="pKey"></param>
|
|
private static void searchWmiParam(Dictionary<string, string> Processor, ManagementObject obj, string pName, string pKey)
|
|
{
|
|
try
|
|
{
|
|
var objVal = $"{obj[pKey]}";
|
|
string strVal = objVal != null ? objVal : "";
|
|
Processor.Add(pName, strVal);
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
|
|
#endregion Private Methods
|
|
}
|
|
} |