C#.Net: Warum ist mein Prozess.Start() hängen?
Ich versuche eine Batchdatei ausgeführt, wie ein anderer user, von meiner web-app. Für einige Grund, die batch-Datei hängt! Ich kann es sehen "cmd.exe" laufen in den task-manager, aber es sitzt einfach da, für immer, nicht in der Lage, getötet zu werden, und die batch-Datei nicht ausgeführt wird. Hier ist mein code:
SecureString password = new SecureString();
foreach (char c in "mypassword".ToCharArray())
password.AppendChar(c);
ProcessStartInfo psi = new ProcessStartInfo();
psi.WorkingDirectory = @"c:\build";
psi.FileName = Environment.SystemDirectory + @"\cmd.exe";
psi.Arguments = "/q /c build.cmd";
psi.UseShellExecute = false;
psi.UserName = "builder";
psi.Password = password;
Process.Start(psi);
Wenn Sie nicht erraten, diese batch-Datei baut meiner Anwendung (eine andere Anwendung als die, die diesen Befehl ausführt).
Den Prozess.Start(psi); Zeile liefert sofort eine Rückgabe, wie es sollte, aber die batch-Datei scheint gerade zu hängen, ohne Sie auszuführen. Irgendwelche Ideen?
EDIT: Siehe unten meine Antwort für den Inhalt der batch-Datei.
- Die output.txt wird nie erstellt.
Ich fügte diese Zeilen:
psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
String outp = p.StandardOutput.ReadLine();
und trat durch Sie in den debug-Modus. Der code hängt an der ReadLine()
. Ich bin ratlos!
InformationsquelleAutor Josh Hinman | 2008-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, ich habe die Antwort gefunden. Es scheint, dass Microsoft in all Ihrer unendlichen Weisheit, hat blockiert batch-Dateien ausgeführt wird, die von IIS in Windows Server 2003. Brenden Tompkins hat ein work-around hier:
http://codebetter.com/blogs/brendan.tompkins/archive/2004/05/13/13484.aspx
Dass nicht Arbeit für mich, weil meine batch-Datei verwendet, WENN und GOTO, aber es wäre auf jeden Fall Arbeit für einfache batch-Dateien.
InformationsquelleAutor Josh Hinman
Warum nicht einfach tun, all die Arbeit, die in C# statt mit batch-Dateien?
Mir war langweilig, also schrieb ich dies sehr schnell, es ist nur eine Gliederung, wie ich es tun würde, da ich nicht weiß, was die command line switches tun oder die Datei Pfade.
InformationsquelleAutor sieben
Ohne zu sehen, das zu bauen.cmd ist es schwer zu sagen, was Los ist, aber Sie sollten bauen Sie den Pfad mit einem Pfad.Kombinieren(arg1, arg2); Es ist der richtige Weg, um einen Weg zu errichten.
Glaube ich nicht, erinnere mich jetzt aber nicht festlegen UseShellExecute = true ?
InformationsquelleAutor Martin Marconcini
Andere Möglichkeit "Debuggen" es ist zu verwenden, standardoutput und dann Lesen:
InformationsquelleAutor Biri
Um zu "sehen", was Los ist, würde ich vorschlagen, Sie verwandeln den Prozess in etwas mehr interaktive (turn off Echo off) und einige "drucken", um zu sehen, wenn etwas ist tatsächlich passiert. Was ist in der output.txt Datei nach dem ausführen dieses?
Macht die bmail tatsächlich ausgeführt wird?
Einige Drucke nach/vor, um zu sehen, was Los ist.
Außerdem fügen Sie "@" mit den Argumenten, nur für den Fall:
Es muß sich um etwas sehr einfaches 🙂
InformationsquelleAutor Martin Marconcini
Meine Vermutung wäre, dass das bauen.cmd ist warten für irgendeine Art von Benutzer-Interaktion/Antworten. Wenn Sie sich die Ausgabe des Befehls mit der "> logfile.txt" - operator am Ende, es könnte Ihnen helfen, das problem zu finden.
InformationsquelleAutor Espo
Hier ist der Inhalt von build.cmd:
Wie Sie sehen, ich bin vorsichtig, nicht zu Ausgabe nichts. Es geht um eine Datei, wird per E-Mail an mich, wenn der Bau passiert, zu scheitern. Ich habe tatsächlich ausgeführt wurde diese Datei als geplanter task nächtlichen für eine ganze Weile jetzt. Ich bin versucht, zu erstellen eine web-app, die mir erlaubt, führen Sie es auf Nachfrage.
Vielen Dank für alle Hilfe bisher! Der Pfad.Kombinieren Spitze war besonders nützlich.
InformationsquelleAutor Josh Hinman
Denke ich cmd.exe hängt, wenn die Parameter falsch sind.
Wenn die batch ausgeführt wird richtig dann würde ich nur shell ausführen wie dieser statt.
Es kann auch sein, dass cmd.exe einfach nicht finden können, zu bauen.cmd also, warum nicht geben Sie den vollständigen Pfad zu der Datei?
InformationsquelleAutor sieben
Was sind die endlines der Sie im batch -? Wenn der code hängt sich auf "ReadLine", dann ist das problem könnte sein, dass es nicht in der Lage zu Lesen, die batch-Datei...
InformationsquelleAutor Martin Marconcini