【发布时间】:2021-05-20 22:46:43
【问题描述】:
我必须创建一个小服务,以显示机器的健康状态(Windwos 服务)。
我创建了一个非常小而简单的 aspnet 应用程序,它返回这些数据。
当我从命令行运行应用程序时(使用dotnet 命令),它运行良好,但是当我将它作为 IIS 站点运行时,cpu 方法不返回任何值。
感谢您的帮助,并为我的英语不好感到抱歉。
这是代码:
[ApiController]
[Route("[controller]")]
[Route("/")]
public sealed class SystemHealthController : ControllerBase
{
[HttpGet("cpu")]
public async Task<ActionResult<string>> GetCpu()
=> await WmicMetricsClient.Cpu().ConfigureAwait(false);
[HttpGet("memory")]
public async Task<ActionResult<string>> GetMemory()
=> await WmicMetricsClient.Memory();
}
public static class WmicMetricsClient
{
public static async Task<string> Memory()
{
var output = await GetCommandLineOutputAsync(
fileName: "wmic",
arguments: "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value");
return output;
}
public static async Task<string> Cpu()
{
var output = await GetCommandLineOutputAsync(
fileName: "wmic",
arguments: "cpu get loadpercentage /Value");
return output;
}
private static async Task<string> GetCommandLineOutputAsync(string fileName, string arguments)
{
var info = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
RedirectStandardOutput = true
};
using var process = Process.Start(info);
return await process.StandardOutput.ReadToEndAsync();
}
}
【问题讨论】:
-
blog.lextudio.com/…
wmic之类的命令很可能需要某些权限,而在 IIS 上运行的 Web 应用程序可能无法满足这些要求。 -
@TheobaldDu,非常非常老了,.NET 1,我会试试,但是我需要一个.net core 的解决方案。