WMI и ошибка "User credentials cannot be used for local connections" - C#
Формулировка задачи:
Здравствуйте, специалисты. Я хотел бы попросить у вас помощи в одном вопросе, мучающим меня на протяжении нескольких дней. Появилась задача организовать мониторинг температуры на операторском компьютере. Я решил написать небольшое приложение на C#, но наткнулся на вот такую проблему. На том компьютере у пользователя, нет прав локального администратора, и дать я ему их не могу. Если запустить получения данных из консоли с помощью Wmic я получаю ошибку Access Denied.
Документации функции ManagementScope, я нашел упоминание о подключении через учетную запись. После чего немного изменил код:
Логин и пароль я указал, от пользователя с правами локального админа на этой машине.
Но теперь программа возвращает мне ошибку на строке scope.Connect();
"User credentials cannot be used for local connections".
Что мне делать? Помогите пожалуйста.
private void button1_Click(object sender, EventArgs e) { hostname = Environment.MachineName; ConnectionOptions options = new ConnectionOptions(); options.Impersonation = System.Management.ImpersonationLevel.Impersonate; options.EnablePrivileges = true; options.Authentication = AuthenticationLevel.Packet; options.Username = hostname+@"\diag"; options.Password = "****"; ManagementScope scope = new ManagementScope(@"\"+hostname+@"\root\WMI", options); scope.Connect(); //Query system for Operating System information ObjectQuery query = new ObjectQuery("SELECT * FROM MSAcpi_ThermalZoneTemperature"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope,query); ManagementObjectCollection queryCollection = searcher.Get(); foreach ( ManagementObject m in queryCollection) { // Display the remote computer information Console.WriteLine("Manufacturer : {0}", m["CurrentTemperature"]); }
Решение задачи: «WMI и ошибка "User credentials cannot be used for local connections"»
textual
Листинг программы
Computer c = new Computer() { CPUEnabled = true }; c.Open(); foreach (var hardware in c.Hardware) { //hardware.Update(); if (hardware.HardwareType == HardwareType.CPU) { foreach (var sensor in hardware.Sensors) if (sensor.SensorType == SensorType.Temperature) listBox1.Items.Add(sensor.Name + ": " + sensor.Value.GetValueOrDefault()); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д