0

C# プログラムから .cmd プロセスを実行しようとしています。コマンドラインでプロセスを実行すると、つまり

C:\Directory\Process.cmd  -x 1000 -y 1000 C:\Input\input.txt

適切な結果が得られます (この場合、プロセスが次の場所にファイルを書き込むことを意味します)。

C:\Output\output.txt

ただし、単純な C# プログラムからこのプロセスを実行しようとすると、出力ファイルが作成されません。ここに私の試みのいくつかがあります:

試行 1)

try
{
    string processName = @"C:\Directory\Process.cmd";
    string argString = @" -x 1000 -y 1000 C:\Input\input.txt"; //The extra space in front of the '-x' is here on purpose
    Process prs = new Process();
    prs.StartInfo.UseShellExecute = false;
    prs.StartInfo.RedirectStandardOutput = false;
    prs.StartInfo.FileName = processName;
    prs.StartInfo.Arguments = argString;
    prs.StartInfo.WindowStyle = ProcessWindowStyle.Normal;

    prs.Start()
}
catch (Exception e)
{
    Console.Writeline(e.Message);
}

試行 2)

try
{
    System.Diagnostics.Process.Start(@"C:\\Directory\\Process.cmd", " -x 1000 -y 1000 C:\\Input\\input.txt";
}
catch (Exception e)
{
    Console.Writeline(e.message);
}

どちらの場合も、例外はスローされず、Process.cmd にアクセスします (シェルでステータスの更新を出力します) が、プロセスは出力ファイルを作成しません。Process.cmd を呼び出そうとする方法に何か問題がありますか? コマンド ラインから直接実行すると正しく動作しますが、C# プログラムから呼び出そうとすると正しく動作しませんか?

4

3 に答える 3

1

ファイルが作成されている可能性がありますが、思った場所ではありません。使用する

prs.StartInfo.WorkingDirectory = "yourpath"

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

UserName と Password を指定する場合は、WorkingDirectory プロパティを設定する必要があります。プロパティが設定されていない場合、デフォルトの作業ディレクトリは %SYSTEMROOT%\system32 です。

ディレクトリがすでにシステム パス変数の一部である場合、このプロパティでディレクトリの場所を繰り返す必要はありません。

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

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

パスが引数として渡され、おそらく書き込み先のファイルにハードコードされたパスロジックを使用していることに気付いた後、これを削除しましたが、コメントがこれを参照しているため、まだ役立つ場合に備えて削除を取り消します.

于 2012-06-06T21:42:04.080 に答える
0

それでようやくソースコードを手に入れることができ、問題はJavaコードにあることに気づきました...プロジェクトディレクトリを出力ディレクトリとして解釈していました。大変お世話になりましたが、とても有益な情報をありがとうございました!

于 2012-06-07T12:47:31.597 に答える