net 5 web api 部署到iis 不能使用process 调用 bat 、cmd 、powershell 取回结果么?
控制台能获取到结果,web api 去调用执行,获取不到结果。
iis 程序池采用默认配置
代码如下:
//执行获取结果 var output1 = Cmd("powershell", "Get-Counter -Counter '\\Processor(_Total)\\% Processor Time' -MaxSamples 1");
public static string Cmd(string fileName, string args) { string output = string.Empty; var info = new ProcessStartInfo(); info.FileName = fileName; info.Arguments = args; info.RedirectStandardOutput = true; using (var process = Process.Start(info)) { process.WaitForExit(); output = process.StandardOutput.ReadToEnd(); } return output; }
你把IIS site对应的APP Pool使用权限较高的LocalSystem启动试试
多半是因为PowerShell没权限返回了错误,而错误会定向到错误流中去了。
想默认 权限下进行操作,改这个是可以的,不改的话,cmd bat 没有一个执行成功的,不改前都是报以下错误
Get-Counter : 无法连接到指定的计算机或该计算机已处于脱机状态。
所在位置 行:1 字符: 1
+ Get-Counter -Counter '\Processor(_Total)\% Processor Time' -MaxSample ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidResult: (:) [Get-Counter],Exception
+ FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand
@apgk: 这是正常的,许多PowerShell操作都需要Run as Administrator,毕竟许多操作会对操作系统进行“修改”从而造成潜在的“危害”。
所以,一定要以管理员权限打开,没有其他办法。
@luzemin: 好,谢谢了,顺便问下,有啥办法获取 cpu利用率,net core 环境下。
@apgk: https://github.com/jackowild/CpuUsagePercentageDotNetCoreExample/blob/master/CpuUsagePercentageDotNetCoreExample/CpuUsagePercentageDotNetCoreExample/Program.cs
@luzemin: 这是当前程序的,而不是当前计算机的
@apgk: https://stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c
总之直接使用PerformanceCounter就可以
@luzemin: net core 没有这个哈
@apgk: 那最简单的办法就是你上面的代码了
@luzemin: 感谢回答