2011-01-15 8 views
2

In meiner Webapp ich mache das folgende. Ich weiß, es ist korrekt, weil ich versuchte 1) dumping start_sz zu einer Textdatei 2) su www-Daten 3) Kopieren Sie die extrahieren Zeichenfolge und es funktionierte.mono Process.Start, wie Bash zu finden?

var start_sz = string.Format(@"bash -c 'ln ""{2}/{0}"" ""{2}/{1}""'", fn, newfn, System.IO.Directory.GetCurrentDirectory()); 
Process.Start(start_sz); 

Ich bekomme die Ausnahme unten also mit Argumentation oben glaube ich, dass es sagen Bash nicht gefunden werden kann.

Kann die angegebene Datei nicht finden

bei System.Diagnostics.Process.Start_shell (System.Diagnostics.ProcessStartInfo Startinfo, System.Diagnostics.Process Prozess) [0x00000] in: 0

bei System .Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo Startinfo, System.Diagnostics.Process Prozess) [0x00000] in: 0

bei System.Diagnostics.Process.Start (System.Diagnostics.ProcessStartInfo Startinfo) [0x00000] in: 0

bei System.Diagnostics.Process.Start (System.String filename) [0x00000] in: 0

bei MySite.QueueManager.MakeLink (System.String fn) [0x00000] in: 0

bei MySite.QueueManager.ImageQueue2() [0x00000] in: 0

bei MySite.QueueManager.ImageQueue() [0x00000] in: 0

Also, wie löse ich das? Grundsätzlich muss ich zur Laufzeit in meiner asp.net App einen Hardlink erstellen (soft is ok).

Ich dachte, vielleicht brauche ich den vollständigen Bash-Pfad, also habe ich versucht /bin/bash -c aber das hat auch nicht funktioniert.

Antwort

2

Warum rufen Sie nicht direkt ln? Ohne bash?

Process.Start("ln", params); 

Auch Sie können den vollständigen Pfad angeben müssen:

Process.Start("/bin/ln", params); 

In der Tat, Process.Start("bash") Werke für mich, so $PATH Umgebungsvariable überprüfen usw.

+0

@ acidzombie24: Schön, dass es geholfen hat! :) – abatishchev

+0

ah # $%^& * (! Ich musste Process.Start mit (string, string) aufrufen.Es dachte, dass die Argumente Teil des Dateinamens waren, daher wurde die Datei nicht gefunden. Warum Sie nicht process.start zwingen, (name, "") zu verwenden, ist es viel weniger fehleranfällig. –

+0

@ acidzombie24: 'Process.Start (string)' erzeugt 'new ProcessStartInfo (string)' und 'Process.Start (string, string)' - 'new ProcessStartInfo (string, string)'. Schauen Sie sich 'ProcessStartInfo'-Konstruktoren an: einer setzt' Argumente', ein anderer - nicht. Also das ist nur Syntax-Zucker Überladung – abatishchev

1

Nein, Sie wissen, dass es korrekt ist, wenn von einer Shell verwendet wird. Diese Shell berücksichtigt den Pfad im Gegensatz zu Process.Start.

Geben Sie einfach den vollständigen Pfad zu Bash an, der mit hoher Wahrscheinlichkeit /bin/bash ist.

+0

Ein gewagtes, aber tun Sie wissen, warum Process.Start eine einzige Param-Überladung hat, anstatt 2 Params (Bin, Args) zu erzwingen. Ich könnte schwören, ich hatte den gleichen Fehler vor einem Jahr, als ich zuletzt Process.Start (Way to Farback und selten zu erinnern. Es biss mich zweimal so viele ich erinnere mich von jetzt an) –

+0

@ acidzombie24: Nicht JonSkeet , aber es gibt tatsächlich eine Menge Fälle, in denen Sie eine ausführbare Datei ausführen möchten und keine Parameter übergeben müssen. – Guvante