Frage

Was sind einige Möglichkeiten, die ich die lokalen Maschine Spezifikationen abfragen kann (eine Reihe von Dingen, von der CPU-Spezifikationen, OS-Version, Grafikkarte Spezifikationen und Treiber, etc.) durch eine programmatische Schnittstelle? Wir sind eine einfache Anwendung in C # zu Test Kompatibilität unseres Haupt-App schreiben und wollen es einige Systemmetriken Dump haben, aber ich kann nicht scheinen zu finden, wo man überhaupt anfangen, welche Schnittstellen zu verwenden, Bibliotheken, alles.

Ich habe alle Arten von Suchanfragen versucht, aber nur Programme finden, und GUI noch dazu, die es einem Benutzer benötigen, um die Interaktion mit, oder installieren.

Alternativ kann ein kleines, Kommandozeilen-Programm würde so lange genauso gut arbeiten, wie wir es mit dem Test-App verteilen zugelassen werden würden.

Ich habe ein Programm gefunden, dass einige der Spezifikationen bekommt ich wollen würde, PsInfo . Allerdings scheint es jedem Benutzer zu verlangen, bis zu einem gewissen Lizenz zustimmen, wenn es zum ersten Mal ausgeführt wird, auch wenn es sich um eine Befehlszeile app ist. Plus, es befasst sich nur mit OS / CPU-Info, und ich muss mehr als das.

Auch: vergessen ausdrücklich zu erwähnen, aber dies ist in der Tat nur notwendig für Windows-Maschinen sein werden. Sie Leute sind schnell!

Edit: Das WMI sieht wie das, was ich brauche, danke! Eine ganze Dose Würmer obwohl, so ich habe tauchen Sie erwähnt, dass für einige Dinge, die der Benutzer Administratorrechte haben muss. dies wird wahrscheinlich kein großes Problem sein, aber es könnte es ein wenig zu begrenzen.

War es hilfreich?

Lösung

Für diese Art von Informationen WMI ist dein Freund. Zum Glück mit WMI in .NET zu tun ist viel einfacher als in der nicht verwalteten Welt. Es gibt eine ganze Reihe von Artikeln gibt, mit zu beginnen, wie diesem , oder dieses Prozessor Informationen abgerufen werden.

Sie werden SQL-ähnliche Abfragen für Objekte in dem WMI-Namensraum am Ende Schreiben Sie die gewünschten Informationen abrufen.

Andere Tipps

Blick in Vielleicht mit Windows Management Instrumentation (WMI), vorausgesetzt, es ist eine Windows-Maschine Ihrer Planung abzufragen. Werfen Sie einen Blick auf die WMI-Code Creator von Microsoft. Es können Sie ganz einfach mit Code-Beispiele für in einigen Sprachen bekommen würde.

WMI funktioniert ausgezeichnet den ganzen Weg zurück in die Windows 2000-Ära, kann aber auch mit etwas Hilfe auch in Win98-Maschinen arbeiten.

Solange Sie haben, oder zur Verfügung stellen kann, Administratoranmeldeinformationen für die Maschine Sie versuchen zu fragen, WMI ist definitiv der Weg zu gehen.

Ich könnte auch den grundlegenden Code poste ich verwenden, um alles zu bekommen ich brauchte, WMI wie hier vorgeschlagen wurde.

Muss ich einen Verweis auf System.Management im c # -Projekt. Dann selbst die Quelle wahrscheinlich ist schrecklich c # gebildet, aber ich habe vor in ihm nie wirklich geschrieben und es ist für ein internes Werkzeug, so dass Art ist neben dem Punkt. Ich vereinfacht habe es ein bisschen so ist es nur wirklich Umgang mit Maschinendaten ausgibt (das Werkzeug tut andere Dinge außer dass). Jeder Aufruf von LogClass () Dumps alle seine Eigenschaften aus. Weitere Klassen auschecken auskippen, nur um den MSDN Abschnitt WMI-Klassen .

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.IO;

namespace SyTest
{
  class Program
  {
    static StreamWriter specStream;

    static void Main(string[] args)
    {
      FileStream specFile =
          new FileStream("machine-specs.txt",FileMode.Create,FileAccess.Write);
      specStream = new StreamWriter(specFile);

      LogClass("Win32_DesktopMonitor");
      LogClass("Win32_VideoController");
      LogClass("Win32_Processor");
      // etc

      specStream.Close();
      specFile.Close();
    }

    static void LogClass(string strTable)
    {
      if (strTable.Length <= 0) return;
      specStream.Write("--- " + strTable + " ---\r\n\r\n");
      WqlObjectQuery wqlQuery =
          new WqlObjectQuery("SELECT * FROM " + strTable);
      ManagementObjectSearcher searcher =
          new ManagementObjectSearcher(wqlQuery);
      try
      {
        if (searcher.Get().Count <= 0)
        {
          specStream.Write("Class has no instances\r\n\r\n");
        }
        foreach (ManagementObject obj in searcher.Get())
        {
          specStream.Write("* " + obj.ToString() + "\r\n");

          if (obj.Properties.Count <= 0)
          {
            specStream.Write("Class instance has no properties\r\n");
            continue;
          }

          foreach (System.Management.PropertyData prop in obj.Properties)
          {
            LogAttr(obj, prop.Name);
          }

          specStream.Write("\r\n");
        }
      }
      catch { specStream.Write("Class does not exist\r\n\r\n"); }
    }
    static void LogAttr(ManagementObject obj, string str)
    {
      if (str.Length <= 0) return;
      string strValue = "";
      try
      {
        strValue = obj[str].ToString();
        try
        {
          string[] pstrTmp = ((string[])obj[str]);
          if (pstrTmp.Length > 0) strValue = String.Join(", ", pstrTmp);
        }
        catch { } // Problem casting, fall back on original assignment
      }
      catch { strValue = "[UNDEFINED]"; }
      specStream.Write(str + ": " + strValue + "\r\n");
    }
  }
}

Für den ungeraden Fall, dass Sie für Linux entwickeln würden, Sie ehrfürchtiges Material innerhalb des /proc pseudofilesystem finden konnten.

Wenn Sie mit WMI gehen zu entscheiden, möchten Sie vielleicht die WMI-Code Creator von Microsoft. Es macht mit WMI recht einfach.

Umgang

Es gibt ein nuget Paket namens MissingLinq.Linq2Management, dass so ziemlich alles über WMI in ein schönes stark typisierte Objekt gewickelt hat. Scheint ziemlich nett.

https://missinglinq.codeplex.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top