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());
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д