1

我认为这不是如何从 .NET 应用程序启动 `powercfg.exe -energy` 的重复问题?

在另一个问题中,OP 已经接受了答案,但问题只是自行解决了,所以我们不知道解决方案是什么(我不完全确定,这是否意味着我可以在此询问问题 - 因为另一个问题中的解决方案可能不适用于我的情况?)


问题:

我正在尝试从 .NET 读取电池信息(特别是设计容量和完全充电容量)。

当我从命令行运行powercfg.exe -batteryreport -xml时,它将电池报告输出为 xml 文件。我发现我可以运行它然后读取 xml 文件。所以我写了以下代码:

        var process = new Process();
        //process.StartInfo.WorkingDirectory = "C:\\Windows\\System32";
        process.StartInfo.FileName = "powercfg";
        process.StartInfo.Arguments = "-batteryreport -xml";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();

        Console.Write(process.StandardOutput.ReadToEnd());
        Console.Write(process.StandardError.ReadToEnd());

但是它给了我这个错误:

The Power Efficiency Diagnostic library (energy.dll) could not be loaded

如果有人有任何建议,请赐教 - 或者即使您可以指出一个可以让我解决问题的方向,我也会非常感激。谢谢你。


更新 1:我刚刚在另一台具有不同配置的笔记本电脑上尝试了上述相同的代码,它可以工作!

笔记本电脑 1:HP、Windows 8.1、.NET Framework 4.5.1 - 不工作 笔记本电脑 2:Macbook、Windows 7、.NET Framework 4.5 - 工作

看来我必须找出两台笔记本电脑之间的区别。


更新 2:在笔记本电脑 2 上编译代码并将 .exe 带到笔记本电脑 1 似乎也可以正常工作!


更新 3:我想我已经发现了问题所在。

默认情况下,当我在 Visual Studio 中创建项目时,项目构建设置具有此标志“首选 32 位”。当它在 64 位 Windows 上运行时,它会导致问题,因为我猜 .dll 是 64 位的。

简单地取消选中它就为我解决了这个问题 - 哇!

我没有足够的“声誉”来发布图片,所以给那些有同样问题的人:

  • 右键单击您的项目,选择属性
  • 单击构建选项卡
  • 向下滚动到 General 部分并取消选中“prefer 32-bit”。
4

0 回答 0