WMI и ошибка "User credentials cannot be used for local connections" - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, специалисты. Я хотел бы попросить у вас помощи в одном вопросе, мучающим меня на протяжении нескольких дней. Появилась задача организовать мониторинг температуры на операторском компьютере. Я решил написать небольшое приложение на C#, но наткнулся на вот такую проблему. На том компьютере у пользователя, нет прав локального администратора, и дать я ему их не могу. Если запустить получения данных из консоли с помощью Wmic я получаю ошибку Access Denied. Документации функции ManagementScope, я нашел упоминание о подключении через учетную запись. После чего немного изменил код:
Листинг программы
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. hostname = Environment.MachineName;
  4. ConnectionOptions options = new ConnectionOptions();
  5. options.Impersonation = System.Management.ImpersonationLevel.Impersonate;
  6. options.EnablePrivileges = true;
  7. options.Authentication = AuthenticationLevel.Packet;
  8. options.Username = hostname+@"\diag";
  9. options.Password = "****";
  10.  
  11. ManagementScope scope = new ManagementScope(@"\"+hostname+@"\root\WMI", options);
  12. scope.Connect();
  13. //Query system for Operating System information
  14. ObjectQuery query = new ObjectQuery("SELECT * FROM MSAcpi_ThermalZoneTemperature");
  15. ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope,query);
  16. ManagementObjectCollection queryCollection = searcher.Get();
  17. foreach ( ManagementObject m in queryCollection)
  18. {
  19. // Display the remote computer information
  20. Console.WriteLine("Manufacturer : {0}",
  21. m["CurrentTemperature"]);
  22. }
Логин и пароль я указал, от пользователя с правами локального админа на этой машине. Но теперь программа возвращает мне ошибку на строке scope.Connect(); "User credentials cannot be used for local connections". Что мне делать? Помогите пожалуйста.

Решение задачи: «WMI и ошибка "User credentials cannot be used for local connections"»

textual
Листинг программы
  1.  Computer c = new Computer()
  2.             {
  3.                 CPUEnabled = true
  4.             };
  5.             c.Open();
  6.  
  7.             foreach (var hardware in c.Hardware)
  8.             {
  9.                 //hardware.Update();
  10.  
  11.                 if (hardware.HardwareType == HardwareType.CPU)
  12.                 {
  13.  
  14.                     foreach (var sensor in hardware.Sensors)
  15.                         if (sensor.SensorType == SensorType.Temperature)
  16.                             listBox1.Items.Add(sensor.Name + ": " + sensor.Value.GetValueOrDefault());
  17.  
  18.                 }
  19.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы