Метод ManagementObjectSearcher Get() выдает исключениеC#

Место общения программистов C#
Ответить
Anonymous
 Метод ManagementObjectSearcher Get() выдает исключение

Сообщение Anonymous »

Я пытаюсь запустить следующий код:

Код: Выделить всё

ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_Processor");
// This line throws the exception
ManagementObjectCollection moc = mos.Get();
и я получаю следующее исключение:

Код: Выделить всё

System.Management.ManagementException: Invalid class
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
at LicenseCheckThingy.Form1.button1_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Для справки: система, на которой я работаю, представляет собой компьютер с Windows XP SP 3 и установленным .net 3.5.

Пользователь на этом компьютере настроен как администратор, однако не использует учетную запись «Администратор».

Я создал пример проекта, содержащий в основном только этот код, в качестве доказательства ошибки. Благодаря добавлению простых сообщений вокруг двух строк я знаю, что строка mos.Get() - это та, которая выдает ошибку, и текст исключения, похоже, поддерживает это благодаря "ManagementObjectEnumerator.MoveNext()" в трассировке стека. В любом случае, я не знаю, что вообще искать на машине.

Обратите внимание: я запускал этот же код на более чем 50+ других машинах (большинство из них Vista или Windows 7) без проблем, так что кажется, что это будет что-то специфическое для этой машины. Предложение/мысль о том, что я мог бы попробовать?

Дополнительная информация:
Итак, я запустил следующий код на компьютере, это вызывает те же исключения, но в объявлении цикла for

Код: Выделить всё

MessageBox.Show("pre setup");  // displays correctly
ManagementScope scope = new ManagementScope(@"\\" + Environment.MachineName + @"\root\cimv2");

//connect to the machine
scope.Connect();

MessageBox.Show("scope setup"); // displays correctly

//use a SelectQuery to tell what we're searching in
SelectQuery searchQuery = new SelectQuery("SELECT * FROM Win32_Processor");
//set the search up
ManagementObjectSearcher searcherObj = new ManagementObjectSearcher(scope, searchQuery);

MessageBox.Show("search object setup"); // displays correctly

//get the results into a collection
ManagementObjectCollection obj = searcherObj.Get();

MessageBox.Show("got ManagementObjectCollection"); // displays correctly

// next statement appears to cause Invalid class exception
foreach ( ManagementObject mo in obj )
{
try
{
MessageBox.Show("looking for device id, cpu0"); // never shows up

if ( string.Equals((string) mo["DeviceID"], "CPU0", StringComparison.InvariantCultureIgnoreCase) )
{
MessageBox.Show("processor ID: " + mo["ProcessorID"].ToString()); // never shows up
break;
}
}
catch ( Exception ex )
{
MessageBox.Show("Exception fetching processor id: " + ex.ToString()); // doesn't show
}
}
Другая помощь??



Не удалось разобраться в этом, похоже, веб-сайт, на котором Johnv2020 рекомендовал, содержит ошибку или проблему в Windows XP SP3, которая не позволяет мне получить идентификатор процессора. Для справки: на этой машине на самом деле используется процессор i5 650, и я «обошел» эту проблему, обернув проблему в try-catch и игнорируя в этом случае идентификатор процессора. Особая благодарность Johnv2020 за помощь!

Подробнее здесь: https://stackoverflow.com/questions/586 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»