0

私は少し奇妙な問題を抱えています..次の行は、powershellで直接正常に実行されます。

1) powercfg -AVAILABLESLEEPSTATES    
2) powercfg -energy

簡単に言えば、-energy はそのファイルを生成し、私が操作できる他のフラグがあります。

C# から 1 行目を実行することも問題なく動作します (このサイト全体の素晴らしいメソッドのいずれかで、

Powershell s_ps = PowerShell.Create();
s_ps.AddScript("powercfg -AVAILABLESLEEPSTATES");
Collection<PSObject> results = s_ps.Invoke();

(またはパイプラインを介してすべてを実行するバージョン、または PSCommand() を作成するバージョンなど)

-energy で同じことを実行すると、コンソールから正常に動作しますが、C# から呼び出そうとすると、「energy.dll」またはその依存関係の 1 つが見つからないという話が始まります。もちろん、すべてのdll(依存関係を含む)はそこにあります-コマンドラインから実行され、とにかく手動で検証されるためです。

Visual Studio は管理者モードで実行されています。念のため、ap をビルドし、管理者モードでも直接実行してみました。

dllを手動でロードしようとしました

 s_ps.AddScript(@"[Reflection.Assembly]::LoadFrom('C:\Windows\System32\energy.dll') | Out-Null");

しかし、それはそれを言う余分なエラーをスローするだけです

「ファイルまたはアセンブリ 'file:///C:\Windows\System32\energy.dll' またはその依存関係の 1 つを読み込めませんでした」

他に何が問題を引き起こしているのか、誰か考えがありますか? (少し走らなければなりませんが、他の誰かよりも先に解決策を見つけた場合は、もちろん投稿します。運が悪いにもかかわらず、ほとんどの時間、それに取り組んでいます)

4

1 に答える 1

0

-engery がコマンドへの切り替えである限り、アセンブリを要求することなく適切に理解し、実行する必要があります。唯一のことは、powercfg.exe -energy が非同期モデルの実行を使用するため、結果を取得するためにアプリが 60 秒まで待機する必要があることです。以下のように実行してみたところ動作しました。 私の環境はWin 7 pro, i7,64bitです

foreach (var v in PowerShellInterop.RunPowerShellScript("powercfg -energy"))
            Console.WriteLine(v);
    internal static IEnumerable RunPowerShellScript(string script)
    {
        PowerShell ps = PowerShell.Create();
        ps.AddScript(script);
        Collection<PSObject> result = ps.Invoke();
        foreach (PSObject obj in result)
        {
            yield return (obj);
        }
    }

結果

60 秒間トレースを有効にしています... システムの動作を観察しています... トレース データを分析しています... 分析が完了しました。

エネルギー効率の問題が見つかりました。

5 エラー 19 警告 40 情報

詳細については、{path}\Debug\energy-report.html を参照してください。

于 2013-05-06T07:46:59.660 に答える