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());
}
}