سؤال

ما هي بعض الطرق التي يمكنني الاستعلام مواصفات الجهاز المحلي (مجموعة من الأشياء من المواصفات وحدة المعالجة المركزية، إصدار نظام التشغيل والمواصفات بطاقة الرسومات والسائقين، الخ) من خلال واجهة البرامج؟ نكتب التطبيق بسيط في C # لاختبار التوافق من التطبيق الرئيسي لدينا ونريد أن يكون ذلك تفريغ بعض مقاييس النظام، ولكن لا أستطيع العثور على ما يبدو من أين تبدأ حتى، ما اجهات الاستخدام، والمكتبات، أي شيء.

ولقد جربت كل أنواع من عمليات البحث، ولكن يمكن العثور فقط على البرامج، ومنها واجهة المستخدم الرسومية في ذلك، والتي تتطلب مستخدم للتفاعل مع، أو لديك لتثبيت.

وبدلا من ذلك، لذلك، برنامج سطر الأوامر صغيرة ستعمل فقط كذلك، طالما أننا سوف يسمح لتوزيعه مع التطبيق الاختبار.

ولقد وجدت برنامج واحد أن يحصل على بعض من المواصفات كنت تريد، <وأ href = "http://technet.microsoft.com/en-us/sysinternals/bb897550.aspx" يختلط = "نوفولو noreferrer" > PsInfo . ومع ذلك، يبدو أن يتطلب كل مستخدم للموافقة على بعض الترخيص عندما تكون الجولة الأولى، على الرغم من أنه تطبيق سطر الأوامر. بالإضافة إلى ذلك، أنها تتعامل فقط مع معلومات OS / وحدة المعالجة المركزية، وسوف تحتاج إلى أكثر من ذلك.

وأيضا: نسيت أن أذكر صراحة، ولكن هذا الواقع لن يؤدي الا أنها ضرورية لأجهزة ويندوز. هل الناس يسارعون!

وتحرير: هذه WMI لا تبدو مثل ما أنا في حاجة، وذلك بفضل! تماما علبة من الديدان على الرغم من ذلك لقد حصلت على الغوص في ويذكر أنه بالنسبة لبعض الأشياء المستخدم لديك امتيازات المسؤول؛ هذا ربما لن يكون مشكلة كبيرة، لكنها قد تحد من ذلك قليلا.

هل كانت مفيدة؟

المحلول

لهذا النوع من WMI هو صديقك. التعامل مع لحسن الحظ WMI في. NET هو أسهل بكثير مما كانت عليه في العالم غير المدارة. هناك الكثير جدا من المواد الى هناك للبدء مع، مثل هذا واحد ، أو هذا واحد لاسترداد المعلومات المعالج.

وسوف ينتهي كتابة استعلامات SQL مثل ضد الكائنات في مساحة الاسم WMI لاسترداد المعلومات التي تريدها.

نصائح أخرى

وربما ننظر في استخدام يندوز إدارة الأجهزة (WMI)، على افتراض أنه جهاز ويندوز التخطيط الخاص بك للاستعلام. نلقي نظرة على WMI رمز الخالق من Microsoft. ويمكن بسهولة تحصل على الذهاب مع نماذج التعليمات البرمجية لفي بعض اللغات.

وWMI يعمل ممتاز كل في طريق العودة إلى عصر ويندوز 2000، ولكن يمكن أن تعمل أيضا في آلات WIN98 جدا مع بعض المساعدة.

وطالما لديك، أو يمكن أن توفر، بيانات اعتماد المسؤول عن الجهاز الذي تحاول الاستعلام، WMI هو بالتأكيد وسيلة للذهاب.

وأنا قد والرد بشكل جيد رمز الأساسي اعتدت على كل ما أحتاجه، وذلك باستخدام WMI كما اقترح هنا.

وفلدي إدراج إشارة إلى System.Management في ج # المشروع. ثم، المصدر نفسه ربما شكلت رهيب ج #، ولكني لم يكتب حقا في ذلك من قبل وانها لأداة داخلية، لذلك هذا النوع من جانب هذه النقطة. لقد مبسطة عليه قليلا حتى انها فقط التعامل مع حقا إخراج المواصفات آلة (الأداة يفعل أشياء أخرى إلى جانب ذلك). كل استدعاء LogClass () مقالب من كل من خصائصه. لمزيد من الطبقات للتخلص من، انظروا فقط إلى القسم MSDN على <لأ href = "http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx" يختلط = "نوفولو noreferrer" > فصول WMI .

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");
    }
  }
}

لحالة الفردية التي تحب أن تطوير لينكس، يمكن أن تجد الاشياء رهيبة داخل pseudofilesystem /proc.

إذا قررت الذهاب مع WMI، قد ترغب في التحقق من في WMI رمز الخالق من Microsoft. فهو يجعل التعامل مع WMI السهل جدا.

وهناك حزمة nuget دعا MissingLinq.Linq2Management الذي يلف كل شيء تقريبا عن WMI إلى لطيفة الكائن كتابة بشدة. يبدو لطيفا جدا.

https://missinglinq.codeplex.com/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top