尝试通过C#Process.Start()运行powercfg/srumutil时出错



我正试图通过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进程进行比较。

相关内容

  • 没有找到相关文章

最新更新