尝试通过 C# 运行 powercfg /srumutil 时出错 Process.Start()
Error when trying to run powercfg /srumutil through C# Process.Start()
我正在尝试通过 C# 应用程序 运行 命令 powercfg /srumutil /output C:\EnergyConsumption\srumutil.csv /csv
。上面的命令 运行s 在 powershell 和 cmd 中成功,但它 returns 通过我的 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() 函数外,其他地方都按预期工作。我在这里遗漏了什么吗?
我认为您的代码没有问题,正如您所怀疑的那样,问题出在执行上下文中。在 non-elevated PowerShell 会话中尝试 运行 powercfg /srumutil
时,我遇到了同样的错误,而它在提升的情况下工作正常,这表明缺乏管理员权限。但是,在这种情况下,错误消息可能会产生误导。当 运行 在 x86 进程中而不是 x64 中使用代码时,我也会遇到同样的错误——在 PowerShell 和 C# 中都是如此。尝试检查您的应用程序是 x86 还是 x64,并将其与您测试 powercfg /srumutil
运行 正常的 PowerShell 进程进行比较。
我正在尝试通过 C# 应用程序 运行 命令 powercfg /srumutil /output C:\EnergyConsumption\srumutil.csv /csv
。上面的命令 运行s 在 powershell 和 cmd 中成功,但它 returns 通过我的 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() 函数外,其他地方都按预期工作。我在这里遗漏了什么吗?
我认为您的代码没有问题,正如您所怀疑的那样,问题出在执行上下文中。在 non-elevated PowerShell 会话中尝试 运行 powercfg /srumutil
时,我遇到了同样的错误,而它在提升的情况下工作正常,这表明缺乏管理员权限。但是,在这种情况下,错误消息可能会产生误导。当 运行 在 x86 进程中而不是 x64 中使用代码时,我也会遇到同样的错误——在 PowerShell 和 C# 中都是如此。尝试检查您的应用程序是 x86 还是 x64,并将其与您测试 powercfg /srumutil
运行 正常的 PowerShell 进程进行比较。