ボタンを押して外部の.batを実行しようとしています。Process.Start()はVisualStudio内のリリースビルドとして起動したときにのみ動作します
意図するいくつかのXCOPY命令です。したがって、私はProcess.Start(startInfo)を使って "sync.bat"を実行します。
.batの出力は、自分のアプリケーションにリダイレクトされ、ダイアログボックスに表示されます。私のコードは、外部呼び出しが終了するまで待機します。
echo "Batch SYNC started."
pause
xcopy "e:\a\*" "e:\b\" /f /i /c /e /y
pause
echo "Batch SYNC finished."
OK:私は「リリース」として私のプログラムを構築し、VisualStudio2013以内にそれを起動すると、すべてが正常に動作し (私は、結果を参照してください黒のウィンドウでEnterキーを押しする必要があり、ファイルがコピーされます)。
FAIL: 私はVisualStudioを以内に私の(ファイル・エクスプローラやデスクトップから中)をダブルクリックでアプリやデバッグビルドを開始すると、私はECHOとPAUSE出力を参照してください、しかし、バッチがなかったです私はXCOPYから何の結果も見ません。 PAUSEとXCOPYが直ちに殺されたかのようです。 私は例外もなく、Windowsログにエントリもありません。
私はDEBUGとRELEASEの設定を同一(成功なし)にしようとしました。
IDEの外でこの単純な機能を使用するために何ができるか考えている人はいますか?ここで
は、ボタンが押されたときに呼び出される関数のコードです:
private void ProcessSync_bat()
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.FileName = "sync.bat";
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.Arguments = "";
startInfo.ErrorDialog = true;
try
{
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
dlgFKSyncMessageBox.AddLine("----------sync.bat started-----------");
dlgSyncMessageBox.AddLine("===============Result================");
while (!exeProcess.StandardOutput.EndOfStream)
{
dlgSyncMessageBox.AddLine(exeProcess.StandardOutput.ReadLine());
}
dlgSyncMessageBox.AddLine("===============ERRORS================");
while (!exeProcess.StandardError.EndOfStream)
{
dlgSyncMessageBox.AddLine(exeProcess.StandardError.ReadLine());
}
exeProcess.WaitForExit();
}
}
catch (Exception exp)
{
dlgSyncMessageBox.AddLine("========EXCEPTION========");
}
}
あなたのbatファイルはそれぞれの出力フォルダにコピーされていますか?私は 'bin \ release'にコピーして、' bin \ debug'から実行しても見つからないと思うでしょう。 – Filburt
ここでその答えを確認しましたか:https://stackoverflow.com/questions/21731783/xcopy-or-move-do-not-work-when-a-wcf-service-runs-a-batch-file-why 'RedirectStandardOutput'オプションを削除する必要があるかもしれません – Bassie