.netから複数のプロセスを実行しているときに、プロセスからの出力を読み取るのに問題があります。1つの例は「netsh」コマンドです。
DHCPサーバーからすべてのスコープを読み取ろうとしています。
Webアプリケーションと単体テストでのみ失敗しています。
以下のコードでは、「メッセージ」は空の文字列です。
var arguments = @"-r myDhcpServer.myDomain dhcp server \\myDhcpServer.myDomain show scope";
var startInfo = new ProcessStartInfo("netsh", arguments)
{
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true
};
using (var cmdProcess = Process.Start(startInfo))
{
var message = cmdProcess.StandardOutput.ReadToEnd();
Debug.WriteLine(message);
cmdProcess.WaitForExit();
}
いくつかのポイント
- VS2008で.net3.5を実行している
- Webアプリ、つまりカッシーニで失敗する
- ユニットテストで失敗する(resharperを使用)
- コンソールアプリから動作します
- Windowsアプリから動作します
- コマンドラインから動作します
- 以前はWindowsXPで動作していました
- UACをオフにしてみました
- 他のコマンドは機能します。たとえばipconfigの場合
- 管理者としてVSを実行してみました
- はい、私はこれを行う他の方法があることを知っており、それらを調べています。しかし、プロセスアプローチが機能しない理由を知りたいのですが。
編集:
それはWindows764ビットにのみあることが判明しました
MS Premierサポートは問題を再現し、解決/回避策に取り組んでいます。