1

これは、.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" を選択します。
4

0 に答える 0