日常更新

This commit is contained in:
jack
2026-04-02 18:32:43 +08:00
parent 111eb22824
commit bc1e86d4ea
32 changed files with 2745 additions and 2742 deletions

View File

@@ -1,27 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<NoWarn>$(NoWarn);NU1701</NoWarn>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>ChromeboxFanControlService</RootNamespace>
<AssemblyName>ChromeboxFanControlService</AssemblyName>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChromeboxFanControl\ChromeboxFanControl.csproj" />
</ItemGroup>
<ItemGroup>
<Content Remove="appsettings.json" />
</ItemGroup>
<!-- appsettings comes from ChromeboxFanControl when merged in dist; service uses that or ProgramData config -->
</Project>
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<NoWarn>$(NoWarn);NU1701</NoWarn>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>ChromeboxFanControlService</RootNamespace>
<AssemblyName>ChromeboxFanControlService</AssemblyName>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChromeboxFanControl\ChromeboxFanControl.csproj" />
</ItemGroup>
<ItemGroup>
<Content Remove="appsettings.json" />
</ItemGroup>
<!-- appsettings comes from ChromeboxFanControl when merged in dist; service uses that or ProgramData config -->
</Project>

View File

@@ -1,43 +1,43 @@
using ChromeboxFanControl;
namespace ChromeboxFanControlService;
public sealed class FanControlWorker : BackgroundService
{
private FanController? _fan;
private AppConfig? _config;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_config = AppConfig.LoadMerged();
_fan = new FanController(_config);
_fan.Start();
try
{
await Task.Delay(Timeout.Infinite, stoppingToken);
}
catch (OperationCanceledException)
{
/* shutdown */
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
_fan?.Stop();
_fan?.Dispose();
if (_config != null)
{
try
{
EctoolRunner.RunSync(_config.EctoolPath, _config.AutoFanCtrlArgs);
}
catch
{
/* best effort restore autofan on shutdown */
}
}
await base.StopAsync(cancellationToken);
}
}
using ChromeboxFanControl;
namespace ChromeboxFanControlService;
public sealed class FanControlWorker : BackgroundService
{
private FanController? _fan;
private AppConfig? _config;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_config = AppConfig.LoadMerged();
_fan = new FanController(_config);
_fan.Start();
try
{
await Task.Delay(Timeout.Infinite, stoppingToken);
}
catch (OperationCanceledException)
{
/* shutdown */
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
_fan?.Stop();
_fan?.Dispose();
if (_config != null)
{
try
{
EctoolRunner.RunSync(_config.EctoolPath, _config.AutoFanCtrlArgs);
}
catch
{
/* best effort restore autofan on shutdown */
}
}
await base.StopAsync(cancellationToken);
}
}

View File

@@ -1,16 +1,16 @@
using ChromeboxFanControlService;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "ChromeboxFanControl";
})
.ConfigureServices(services =>
{
services.AddHostedService<FanControlWorker>();
})
.Build();
await host.RunAsync();
using ChromeboxFanControlService;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "ChromeboxFanControl";
})
.ConfigureServices(services =>
{
services.AddHostedService<FanControlWorker>();
})
.Build();
await host.RunAsync();

View File

@@ -1,15 +1,15 @@
{
"EctoolPath": "C:\\Program Files\\crosec\\ectool.exe",
"PollIntervalMs": 1500,
"FanRpmPollEveryNCycles": 1,
"FanRpmArgs": [ "pwmgetfanrpm", "0" ],
"FanDutyArgs": null,
"AutoFanCtrlArgs": [ "autofanctrl" ],
"TempSource": "AverageCore",
"FailSafeAfterConsecutiveErrors": 5,
"FailSafeFanPercent": 100,
"FailSafeRestoreAutoFan": false,
"ChartHistoryMinutes": 15,
"ChartMaxPoints": 900,
"CurvePoints": [ 0, 0, 10, 25, 40, 55, 70, 80, 90, 95, 97, 98, 99, 100 ]
}
{
"EctoolPath": "C:\\Program Files\\crosec\\ectool.exe",
"PollIntervalMs": 1500,
"FanRpmPollEveryNCycles": 1,
"FanRpmArgs": [ "pwmgetfanrpm", "0" ],
"FanDutyArgs": null,
"AutoFanCtrlArgs": [ "autofanctrl" ],
"TempSource": "AverageCore",
"FailSafeAfterConsecutiveErrors": 5,
"FailSafeFanPercent": 100,
"FailSafeRestoreAutoFan": false,
"ChartHistoryMinutes": 15,
"ChartMaxPoints": 900,
"CurvePoints": [ 0, 0, 10, 25, 40, 55, 70, 80, 90, 95, 97, 98, 99, 100 ]
}