У меня есть сервис C# (.NET Framework 4.8), и я хочу добавить мониторинг температуры.
для этого я добавил (в ссылке) GetCoreTempinFonet DLL в моей службе (мы решили использовать GetCoreTempinfonet, потому что мы уже используем другие приложения, но не для обслуживания) < /p>
. : < /strong>
Я могу запустить свое обслуживание приложения в режиме отладки или в режиме консоли для тестирования, и у меня нет проблем с температурой. Однако, когда я обычно запускаю его в качестве службы, значение составляет 0. Только в сервисном режиме (не в консоли), я получаю код ошибки CORETEMP_NOT_FOUND, а сообщение - «Ядро температура не работает или не поддерживает общую память». Но Coretemp работает < /p>
Я попытался добавить, в безопасности Coretemp.exe, та же учетная запись моего сервиса, ничто не изменилось
Я попытался запустить Coretemp в администраторе, отмечая, что изменение тоже < /p>
Я думаю, что это проблема доступа справа, но я не знаю, что я могу изменить на стороне обслуживания или на стороне Tempcore.
Код: Выделить всё
Function :
private static void MonitoringTemperature()
{
Temperatures tempc = new Temperatures();
tempc.OnSendMessageInfo += Temp_OnSendMessageInfo;
try
{
Temperatures.RetourTemperaturePC resultatTemperature = tempc.TemperaturePC();
if (resultatTemperature != null) tabTemperaturePC.Add(resultatTemperature.valeur);
if (tabTemperaturePC.Count >= 10)
{
List temp = new List(tabTemperaturePC);
temp.Remove(temp.Max());
temp.Remove(temp.Min());
temperaturePC = (int)temp.Average();
while (tabTemperaturePC.Count > 10)
tabTemperaturePC.RemoveAt(0);
}
InitParameters initParam = InitParameters.Load();
if (temperaturePC >= initServ.WarningTemperature
&& temperaturePC < initServ.AlarmTemperature && !warningTempTriggered)
{
alarmTempTriggered = false;
warningTempTriggered = true;
Debug($"Warning the temperature of PC is high ({temperaturePC.ToString("0 °C")})");
}
else if (temperaturePC > initServ.AlarmTemperature && !alarmTempTriggered)
{
alarmTempTriggered = true;
Debug($"Alarm the temperature of PC is too high ({temperaturePC.ToString("0 °C")})");
}
else
{
if (temperaturePC < initParam.WarningTemperature)
warningTempTriggered = false;
if (temperaturePC < initParam.AlarmTemperature)
alarmTempTriggered = false;
}
}
catch (Exception ex)
{
Debug($"Error while temperature monitoring : {ex}");
}
finally
{
tempc.OnSendMessageInfo -= Temp_OnSendMessageInfo;
}
}
Class :
public class Temperatures
{
public class RetourTemperaturePC
{
public int valeur;
public int seuil;
}
public RetourTemperaturePC TemperaturePC()
{
RetourTemperaturePC resultat = new RetourTemperaturePC();
resultat.valeur = 0;
resultat.seuil = 0;
CoreTempInfo CTInfo = new CoreTempInfo();
CTInfo.ReportError += CTInfo_ReportError;
bool bReadSuccess = CTInfo.GetData();
if (bReadSuccess)
{
resultat.valeur = (int)CTInfo.GetTemp[0];
resultat.seuil = (int)CTInfo.GetTjMax[0];
}
else
{
OnSendMessageInfo?.Invoke($"Read success : {bReadSuccess}}");
}
return resultat;
}
private void CTInfo_ReportError(ErrorCodes ErrCode, string ErrMsg)
{
OnSendMessageInfo?.Invoke($"Error code : {ErrCode} - Error message : {ErrMsg}");
}
public double ConversionFtoC(double temperature)
{
return (temperature - 32) / 1.8;
}
public double ConversionCtoF(double temperature)
{
return (temperature * 1.8) + 32;
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... rp-service
Мобильная версия