Ich versuche, eine externe .bat auszuführen, indem Sie eine Taste drücken.Process.Start() funktioniert nur, wenn als Release-Build in VisualStudio gestartet
Die Absicht ist, einige XCOPY-Anweisungen aufzurufen. Daher führe ich "sync.bat" mit Process.Start (startInfo) aus.
Die Ausgabe dieser .bat wird zu meiner App umgeleitet und in einem Dialogfeld angezeigt. Mein Code wartet, bis der externe Anruf beendet ist.
echo "Batch SYNC started."
pause
xcopy "e:\a\*" "e:\b\" /f /i /c /e /y
pause
echo "Batch SYNC finished."
OK: Wenn ich mein Programm als „Freigabe“ bauen und es innerhalb VisualStudio2013 beginnen, alles gut funktioniert (ich sehe die Ergebnisse, drücken muß, um in dem schwarzen Fenster eingeben, werden Dateien kopiert).
FAIL: Wenn ich meine App durch Doppelklick (in Datei-Explorer oder auf dem Desktop) oder ein Debug-Build in dem Visual Studio starten, sehe ich das ECHO und den PAUSE-Ausgang, aber der Ansatz tat nicht stopp und ich sehe keine Ergebnisse von XCOPY. Es scheint, als ob die PAUSE und XCOPY sofort getötet werden. Ich habe keine Ausnahme und keinen Eintrag im Windows-Protokoll.
Ich habe versucht, DEBUG und RELEASE Konfiguration identisch (ohne Erfolg) zu machen.
Hat jemand eine Idee, was ich tun kann, um diese einfache Funktion außerhalb der IDE zu arbeiten? Hier
ist der Code der Funktion aufgerufen wird, wenn die Taste gedrückt wird:
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========");
}
}
Wird Ihre Fledermausdatei in den entsprechenden Ausgabeordner kopiert? Ich vermute, dass Sie es nur in 'bin \ release' kopiert haben, so dass es nicht gefunden wird, wenn es von' bin \ debug' ausgeführt wird. – Filburt
Haben Sie die Antwort hier überprüft: https://stackoverflow.com/questions/21731783/xcopy-or-move-do-not-work-when-a-wcf-service-runs-a-batch-file-why Sie Möglicherweise müssen die RedirectStandardOutput-Optionen entfernt werden – Bassie