سؤال

كنت تواجه مشكلة في الوصول مباشرة إلى Win32_OperatingSystem إدارة الصف التي يتعرض لها عبر WMI.

فمن فئة المفرد, و أنا واثق جدا "Win32_OperatingSystem=@" هو المسار الصحيح جملة على سبيل المثال المفرد.

الدعوة إلى InvokeMethod ينتج استثناء المدرجة في الجزء السفلي من السؤال ، وكذلك الوصول إلى ClassPath الملكية (علق الخط).

ما الخطأ الذي فعلته ؟

[أنا على علم بأنني يمكن استخدام ManagementObjectSearcher/ObjectQuery للعودة مجموعة من Win32_OperatingSystem (التي تحتوي على واحد فقط), ولكن منذ أن كنت أعلم أنه هو المفرد ، أريد الوصول إليه مباشرة.]


ManagementScope cimv2 = InitScope(string.Format(@"\\{0}\root\cimv2", this.Name));

ManagementObject os = new ManagementObject(
    cimv2,
    new ManagementPath("Win32_OperatingSystem=@"),
    new ObjectGetOptions());

//ManagementPath p = os.ClassPath;

os.InvokeMethod("Reboot", null);

النظام.إدارة.ManagementException تم القبض رسالة=كائن غير صالح"مسار " المصدر="System.إدارة" StackTrace:في النظام.إدارة.ManagementException.ThrowWithExtendedInfo(ManagementStatus رمز الخطأ) في النظام.إدارة.ManagementObject.تهيئة(منطقية getObject) في النظام.إدارة.ManagementBaseObject.get_wbemObject() في النظام.إدارة.ManagementObject.get_ClassPath() في النظام.إدارة.ManagementObject.GetMethodParameters(سلسلة methodName, ManagementBaseObject& inParameters, IWbemClassObjectFreeThreaded& inParametersClass, IWbemClassObjectFreeThreaded& outParametersClass) في النظام.إدارة.ManagementObject.InvokeMethod(سلسلة methodName ، وجوه[] args)


شكرا على الردود.

نيك - أنا لا أعرف كيفية التوجه نحو القيام بذلك :)

أوروس كنت تحت انطباع أنه كان المفرد الدرجة بسبب هذا MSDN الصفحة.كما فتح فئة في WBEMTest تظهر فائدة هذا.


الحالات يعرض مربع الحوار:"1 الكائنات" و "ماكس.الدفعة:1" في تلك المجالات و قوائم "Win32_OperatingSystem=@"

على ManagementScope هو التحقق من العامل ، لذلك أنا لا أعرف ما هو.أنا WMI المبتدئين ولكن يبدو أن هذا هو واحد من أبسط حالات الاستخدام!

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

المحلول

واو, العالم يتغير.آسف, لم أكن أدرك أنك تستخدم ويندوز فيستا.كما ترون هنا, الأمور كانت مختلفة في نظام التشغيل Windows XP.ماذا يحدث عند النقر فوق "الحالات" بوتون?

نصائح أخرى

Win32_OperatingSystem ليست فئة المفرد - إذا كنت تحقق تصفيات, سترى أنه لا يوجد المفرد تصفيات المحدد لها ، لذلك سيكون لديك لاستخدام ManagementObjectSearcher.الحصول على() أو ManagementClass.GetInstances() على الرغم من أن هناك مثيل واحد فقط من فئة.Win32_OperatingSystem نجوم هو الاسم حتى لا يكون هناك خيار للحصول على سبيل المثال ،

ManagementObject OS = new ManagementObject(@"Win32_OperatingSystem.Name='OSname'")

ولكن في تجربتي ، OSName هو دائما شيء من هذا القبيل:

"Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1"

وذلك باستخدام ManagementObjectSearcher هو على الأرجح أسهل حل.

لقد حاول هذا التطبيق البسيط الذي عملت موافق

using System;
using System.Management;

namespace WmiPlay
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ManagementScope cimv2 = new ManagementScope(@"\\.\root\cimv2");
                ManagementObject os = new ManagementObject(cimv2, new ManagementPath("Win32_OperatingSystem=@"), new ObjectGetOptions());
                Console.Out.WriteLine(os);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex);
            }
        }
    }
}

ترى إذا كان هذا يعمل بالنسبة لك ؟ لم تصل في Visual Studio التي عادة تشغيل كمسؤول تحت ويندوز فيستا x64.

أنا لست متأكد 100% من الإجابة لكن هل حاولت استخدام عاكس أن ننظر إلى ما ManagementObjectSearcher ؟ قد تعطيك بعض دليل على ما تقومون به خطأ.

ربما أود أن إنشاء استعلام أن يحصل على سبيل المثال حيث الابتدائية = true.أنا لم تستخدم Win32_OperatingSystem في حين, ولكن أتذكر الحصول على مثيلات متعددة ، حاليا تمهيد قد الابتدائية تساوي true.

دنكان كتب:

الحالات يعرض مربع الحوار:"1 الكائنات" و "ماكس.الدفعة:1" في تلك المجالات و >قوائم "Win32_OperatingSystem=@"

يبدو أنه ينبغي أن تعمل.يمكنك اختبار الخاص بك مع رمز آخر الطبقة المفردة مثل:

"Win32_WmiSetting=@"

وانظر إذا كنت لا يزال الحصول على الاستثناء.

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