2016-08-04 25 views
0

Ich hosten derzeit OSRM lokal auf meinem Computer, um eine Routing-Anwendung zu erstellen. Wenn die Anwendung gestartet wird, wird eine bool ServiceAvailable mit einer Testabfrage überprüft, um festzustellen, ob die Anwendung verfügbar ist und lokal ausgeführt wird. Ich möchte in der Lage sein, die OSRM-Anwendung zu starten, sollte diese bool false zurückgeben. Ich habe eine StackOverflow link mit einem ähnlichen Problem gefunden und versucht, es zu implementieren, aber die Anwendung wird nicht geladen. Hier ist mein aktueller Code:Ausführen eines Cmd-Befehls aus meinem C# -Code

private void StartOSRMService() 
    { 
     Process process = new Process(); 
     process.StartInfo.WorkingDirectory = @"C:\"; 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.FileName = "cmd.exe"; 
     process.StartInfo.Arguments = "/c cd users/james/desktop/osrm/osrm-backend/osrm_release"; 
     process.StartInfo.Arguments = "/c osrm-routed wales-latest.osrm"; 
    } 

Die Methode wird ausgeführt, aber der Dienst startet nie. Bei anderen Methoden bricht mein Code aufgrund eines Fehlerantrags Http.Web aufgrund des Fehlens des Dienstes.

+1

Die zweite 'process.StartInfo.Arguments'-Zuweisung überschreibt die erste, meinst du' + = '(mit einem Leerzeichen)? –

+1

Und Sie rufen 'process.Start()' nicht auf. Sie konfigurieren den Prozess nur _configure_, führen ihn aber niemals aus. –

+0

Es sieht so aus, als ob Sie versuchen, 2 Befehle auf einmal auszuführen. Warum ändern Sie das Arbeitsverzeichnis nicht in "c: \ Benutzer/james/desktop/osrm/osrm-backend/osrm_release" und dann lautet der Befehl "osrm -routed wales-lastest.osrm "anstelle eines Parameters – BugFinder

Antwort

1

Sie können versuchen, die folgenden:

private void StartOSRMService() 
    { 
     var startInfo = new ProcessStartInfo(@"C:\users\james\desktop\osrm\osrm-backend\osrm_release\osrm-routed.exe"); 
     startInfo.WorkingDirectory = @"C:\users\james\desktop\osrm\osrm-backend\osrm_release"; 
     startInfo.UseShellExecute = false; 
     startInfo.Arguments = "wales-latest.osrm"; 
     Process.Start(startInfo); 
    } 

Weitere Informationen über Process.Start()

Auch auf der Grundlage Ihrer ursprünglichen StartInfo.Arguments, die „/C“ erzählt beenden zu trösten, nachdem der Befehl ausgeführt wurde Wenn also "osrm-routed" der Dienst ist, der in der Konsole ausgeführt werden muss und die Konsole beendet wird, wird auch die Anwendung selbst beendet, wenn die Konsole beendet wird.

+1

Ich denke, es war die '/ c', die das vom Arbeiten abhielt. Ihre Lösung hat perfekt funktioniert, danke. –