これは、.NET アプリから `powercfg.exe -energy` を開始する方法は?の重複した質問ではないと思います。
もう1つの質問では、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: ラップトップ 2 でコードをコンパイルし、.exe をラップトップ 1 に移動することも同様に機能するようです!
更新 3: 何が問題なのかがわかったと思います。
デフォルトでは、Visual Studio でプロジェクトを作成すると、プロジェクトのビルド設定に「32 ビットを優先」というフラグが設定されます。これを 64 ビット Windows で実行すると、.dll が 64 ビットであると推測されるため、問題が発生します。
チェックを外すだけで問題が解決しました-すごい!
画像を投稿するのに十分な「評判」がないので、同じ問題を抱えている人のために、ここに行きます:
- プロジェクトを右クリックし、[プロパティ] を選択します。
- [ビルド] タブをクリックします。
- 一般セクションまで下にスクロールし、UNCHECK "prefer 32-bit" を選択します。