2つのことを実行する必要があります:バッチファイルを実行して正常に動作し、コマンドを実行します(動作しません)。 コマンドのメソッドが 'ファイルが見つかりません'という例外をスローします。 cmdウィンドウを開いてコマンドを入力すると、完全に動作します。コードからコマンドラインコマンドを実行するには
private static void Rescan()
{
//System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("DEVCON ReScan");
//psi.RedirectStandardOutput = true;
//psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//psi.UseShellExecute = false;
//System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "DEVCON ReScan";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();
System.IO.StreamReader myOutput = proc.StandardOutput;
proc.WaitForExit(4000);
if (proc.HasExited)
{
string output = myOutput.ReadToEnd();
FileIO.WriteLog(_writePath, output);
}
}
コメント付きコードでも同じ例外がスローされます。
私には1アップヴォートがあります。ありがとう! – callisto
面白い理由から、明らかに "FileName"パラメータであっても、それはSystem.Diagnostics.ProcessとネイティブShellExecute(Ex)のよくある間違いです。 – OregonGhost
Filenameにファイル名(devcon.exe)を設定し、 ReScan引数を渡すにはproc.StartInfo.Argumentsを使用します。何が何であるかを明白に保つだけです。 –