1

実行する .bat ファイルがあります。

そのファイル内.batの最後にそのコードがあります

START _file_creator.bat %some_arg_name%
ENDLOCAL
EXIT

実行中にウィンドウを表示したくありません。また、この.batファイルによる操作が完了するまで待ってから実行を終了する必要があります (操作の最後に、「続行するには任意のキーを押してください」という標準テキストが表示されます)。 )。そのファイルによる出力とエラーも確認する必要があるため、そのコードを使用しようとしています。

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = @"C:\m_f\_config.bat";
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.CreateNoWindow = true;

        proc.Start();
        proc.WaitForExit();
        output1 = proc.StandardError.ReadToEnd();
        proc.WaitForExit();
        output2 = proc.StandardOutput.ReadToEnd();
        proc.WaitForExit();

しかし、私が得るのはエラーだけです

Windows can not find file "_file_creator.bat".
Make sure you typed the name correctly and try again.

もちろん、その.batファイルを実行すると正常に動作しますproc.StartInfo.UseShellExecute = trueが、その場合は設定できずRedirectStandardError = trueRedirectStandardOutput = true

それを修正する方法?

編集

そのコードを使用すると、現在動作します

 proc.StartInfo.FileName = @"C:\m_f\_config.bat";
 proc.StartInfo.WorkingDirectory = @"C:\m_f\";
4

1 に答える 1

3

作業ディレクトリを正しく設定してみる_file_creator.batか、PATH. 次の作業ディレクトリに関するドキュメントを参照してくださいUseShellExecute

WorkingDirectoryプロパティの動作は、 UseShellExecuteプロパティの値によって異なります。UseShellExecutetrue の場合、WorkingDirectoryプロパティは実行可能ファイルの場所を指定します。WorkingDirectoryが空の文字列の場合、現在のディレクトリに実行可能ファイルが含まれていると見なされます。

UseShellExecutefalseの場合、WorkingDirectoryプロパティは実行可能ファイルの検索に使用されません。代わりに、開始されたプロセスによってのみ使用され、新しいプロセスのコンテキスト内でのみ意味を持ちます。UseShellExecutefalseの場合、FileNameプロパティは実行可能ファイルへの完全修飾パスである必要があります。

于 2012-06-24T12:50:46.187 に答える