我正试图通过C#应用程序运行命令powercfg /srumutil /output C:\EnergyConsumption\srumutil.csv /csv
。上面的命令在powershell和cmd中成功运行,但在通过我的C#程序执行时返回以下错误:
Unable to perform operation. An unexpected error (0x1f) has occured: A device attached to the system is not functioning.
我将澄清:
- 在这两种情况下,我都在带电池的机器(笔记本电脑(上运行此命令
- Visual studio以管理员身份运行,进程是用
Verb = "runas"
启动的,所以它也应该被提升 - 我已经在C#中尝试了这方面的每一种变体,包括(所有这些都失败了(:
cmd.exe /K powercfg /srumutil
powershell.exe Start-Process powercfg /srumutil
- 将其放入bat文件中,并使用Process.Start((运行bat文件
- 其他参数将适用于Process.Start和powercfg,如
powercfg /L
,但决不能使用/srumutil
有问题的代码:
using System;
using System.Diagnostics;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var info = new ProcessStartInfo()
{
FileName = "powercfg.exe",
Arguments = "/srumutil /output C:\EnergyConsumption\srumutil.csv /csv",
Verb = "runas",
UseShellExecute = false
};
var proc = Process.Start(info);
proc.WaitForExit();
Console.ReadLine();
}
}
}
长话短说powercfg /srumutil
除了通过Process.Start((函数外,其他地方都能正常工作。我这里缺了什么吗?
我认为您的代码很好,问题就在您怀疑的执行上下文中。当我试图在非提升的PowerShell会话中运行powercfg /srumutil
时,我也遇到了同样的错误,而它在提升的会话中运行良好,这表明缺乏管理权限。但是,在这种情况下,错误信息可能具有误导性。在PowerShell和C#中,我在x86进程而不是x64中运行代码时也会遇到同样的错误。尝试检查您的应用程序是x86还是x64,并将其与测试powercfg /srumutil
运行良好的PowerShell进程进行比较。