c# operating-system system processor

Obtenga información de la PC(sistema) en Windows Machine-C#script



operating-system system (5)

Hay un paquete nuget llamado MissingLinq.Linq2Management que ha envuelto prácticamente todo lo relacionado con WMI en un objeto agradable y bien tipado. Parece bastante bonito

https://missinglinq.codeplex.com/

¿Hay alguna manera de obtener la siguiente información usando el script c #?

Nombre de PC Etiqueta de servicio Tipo de CPU Tamaño de velocidad de la CPU de la unidad c: /, RAM instalada, nombre del sistema operativo, clave de producto del SO, versión de Office y clave de producto de Office.

Gracias.


Para hacer esto Agregue el Microsoft.VB en su Refrence. Para agregar esto, haga clic con el botón derecho en la carpeta de la solución Refrence, explore y haga clic en Agregar referencias, luego haga clic en .NET y haga clic en Microsoft.visualBasic y luego haga clic en Aceptar. Después de hacer esto importa esto como:

using Microsoft.VisualBasic.Devices; public void getSystemDetails() { UserName.Text = Environment.UserName; // User name of PC LabelOS.Text = getOSInfo(); // OS version of pc MachineTxt.Text = Environment.MachineName;// Machine name string OStype = ""; if (Environment.Is64BitOperatingSystem) { OStype = "64-Bit, "; } else { OStype = "32-Bit, "; } OStype += Environment.ProcessorCount.ToString() + " Processor"; label8.Text = OStype; // Processor type ulong toalRam = cinfo.TotalPhysicalMemory; double toal = Convert.ToDouble(toalRam / (1024 * 1024)); int t = Convert.ToInt32(Math.Ceiling(toal / 1024).ToString()); label6.Text = t.ToString() + " GB";// ram detail } public string getOSInfo() { //Get Operating system information. OperatingSystem os = Environment.OSVersion; //Get version information about the os. Version vs = os.Version; //Variable to hold our return value string operatingSystem = ""; if (os.Platform == PlatformID.Win32Windows) { //This is a pre-NT version of Windows switch (vs.Minor) { case 0: operatingSystem = "95"; break; case 10: if (vs.Revision.ToString() == "2222A") operatingSystem = "98SE"; else operatingSystem = "98"; break; case 90: operatingSystem = "Me"; break; default: break; } } else if (os.Platform == PlatformID.Win32NT) { switch (vs.Major) { case 3: operatingSystem = "NT 3.51"; break; case 4: operatingSystem = "NT 4.0"; break; case 5: if (vs.Minor == 0) operatingSystem = "Windows 2000"; else operatingSystem = "Windows XP"; break; case 6: if (vs.Minor == 0) operatingSystem = "Windows Vista"; else operatingSystem = "Windows 7 or Above"; break; default: break; } } }


Tiene el nombre de la PC como un valor que desea, por lo que puede obtenerlo de Environment.MachineName si desea la computadora local, o puede hacer IPHostEntry hostEntry = Dns.GetHostEntry(ip); luego string host = hostEntry.HostName; para usar DNS para resolver el nombre de una computadora remota si solo tiene su IP.

Puede obtener cierta información del registro, después de verificar que se está ejecutando el Registro remoto, suponiendo que desea una computadora remota:

ServiceController sc = new ServiceController("RemoteRegistry", computer); if (sc.Status.Equals(ServiceControllerStatus.Running)) { // do your stuff }

Y puedes iniciarlo si se encuentra detenido:

if (sc.Status.Equals(ServiceControllerStatus.Stopped) || sc.Status.Equals(ServiceControllerStatus.StopPending)) { sc.Start(); }

Agregue esta declaración de using en la parte superior de su página:

using Microsoft.Win32;

Para obtener el nombre del equipo, puede ir a HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Control / ComputerName / ActiveComputerName:

string path = @"HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/ComputerName/ActiveComputerName"; RegistryKey rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path); string pcName = rk.GetValue("computerName").ToString();

Para cualquier comando de registro local, simplemente quite RegistryKey.OpenRemoteBaseKey( y , computer) - se convierte en:

RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(path);

El RegistryView.Registry64 generalmente no es obligatorio (en su lugar, puede usar RegistryView.Default ), pero puede ser necesario si se crea una aplicación de 32 bits que necesita acceder a un registro en un sistema operativo de 64 bits. En lugar de todo en una línea, también podría hacer algo como esto, por ejemplo:

using (var root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) { using (var key = root.OpenSubKey(@"Software/Microsoft/Windows NT/CurrentVersion", false)) { var registeredOwner = key.GetValue("RegisteredOwner"); } }

Crédito : https://social.msdn.microsoft.com/Forums/en-US/ea997421-4d55-49db-97ad-cf629c65577b/registrylocalmachineopensubkey-does-not-return-all-values?forum=csharpgeneral

Para el nombre de la CPU:

string path = @"HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/0"; RegistryKey rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path); string cpuName = rk.GetValue("processorNameString").ToString();

Para el nombre del sistema operativo y la clave:

string path = @"SOFTWARE/Microsoft/Windows NT/CurrentVersion"; RegistryKey rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path); string osName = rk.GetValue("productName").ToString(); string servicePack = rk.GetValue("CSDVersion").ToString(); byte[] digitalProductId = registry.GetValue("DigitalProductId") as byte[]; string osProductKey = DecodeProductKey(digitalProductId);

De Geeks With Blogs para obtener claves de producto:

public static string DecodeProductKey(byte[] digitalProductId) { // Offset of first byte of encoded product key in // ''DigitalProductIdxxx" REG_BINARY value. Offset = 34H. const int keyStartIndex = 52; // Offset of last byte of encoded product key in // ''DigitalProductIdxxx" REG_BINARY value. Offset = 43H. const int keyEndIndex = keyStartIndex + 15; // Possible alpha-numeric characters in product key. char[] digits = new char[] { ''B'', ''C'', ''D'', ''F'', ''G'', ''H'', ''J'', ''K'', ''M'', ''P'', ''Q'', ''R'', ''T'', ''V'', ''W'', ''X'', ''Y'', ''2'', ''3'', ''4'', ''6'', ''7'', ''8'', ''9'', }; // Length of decoded product key const int decodeLength = 29; // Length of decoded product key in byte-form. // Each byte represents 2 chars. const int decodeStringLength = 15; // Array of containing the decoded product key. char[] decodedChars = new char[decodeLength]; // Extract byte 52 to 67 inclusive. ArrayList hexPid = new ArrayList(); for (int i = keyStartIndex; i <= keyEndIndex; i++) { hexPid.Add(digitalProductId[i]); } for (int i = decodeLength - 1; i >= 0; i--) { // Every sixth char is a separator. if ((i + 1) % 6 == 0) { decodedChars[i] = ''-''; } else { // Do the actual decoding. int digitMapIndex = 0; for (int j = decodeStringLength - 1; j >= 0; j--) { int byteValue = (digitMapIndex << 8) | (byte)hexPid[j]; hexPid[j] = (byte)(byteValue / 24); digitMapIndex = byteValue % 24; decodedChars[i] = digits[digitMapIndex]; } } } return new string(decodedChars); }

Eso saca a los difíciles del camino. El punto es, el registro es tu amigo.



using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Management; //This namespace is used to work with WMI classes. For using this namespace add reference of System.Management.dll . using Microsoft.Win32; //This namespace is used to work with Registry editor. namespace OperatingSystemInfo1 { class TestProgram { static void Main(string[] args) { SystemInfo si = new SystemInfo(); //Create an object of SystemInfo class. si.getOperatingSystemInfo(); //Call get operating system info method which will display operating system information. si.getProcessorInfo(); //Call get processor info method which will display processor info. Console.ReadLine(); //Wait for user to accept input key. } } public class SystemInfo { public void getOperatingSystemInfo() { Console.WriteLine("Displaying operating system info..../n"); //Create an object of ManagementObjectSearcher class and pass query as parameter. ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_OperatingSystem"); foreach (ManagementObject managementObject in mos.Get()) { if (managementObject["Caption"] != null) { Console.WriteLine("Operating System Name : " + managementObject["Caption"].ToString()); //Display operating system caption } if (managementObject["OSArchitecture"] != null) { Console.WriteLine("Operating System Architecture : " + managementObject["OSArchitecture"].ToString()); //Display operating system architecture. } if (managementObject["CSDVersion"] != null) { Console.WriteLine("Operating System Service Pack : " + managementObject["CSDVersion"].ToString()); //Display operating system version. } } } public void getProcessorInfo() { Console.WriteLine("/n/nDisplaying Processor Name...."); RegistryKey processor_name = Registry.LocalMachine.OpenSubKey(@"Hardware/Description/System/CentralProcessor/0", RegistryKeyPermissionCheck.ReadSubTree); //This registry entry contains entry for processor info. if (processor_name != null) { if (processor_name.GetValue("ProcessorNameString") != null) { Console.WriteLine(processor_name.GetValue("ProcessorNameString")); //Display processor ingo. } } } } }