2016-08-04 18 views
0

私は現在、ルーティングアプリケーションを構築するために私のマシンにローカルにOSRMをホストしています。アプリケーションが起動すると、テストクエリでbool ServiceAvailableがチェックされ、アプリケーションが使用可能でローカルで実行されているかどうかが確認されます。私はこのboolが偽を返すならば、OSRMアプリケーションを開始できるようにしたい。私は同様の問題を持つStackOverflow linkを見つけて実装しようとしましたが、アプリケーションは読み込まれません。現在のコードは次のとおりです。私のC#コード内からcmdコマンドを実行

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"; 
    } 

このメソッドは実行されましたが、サービスは開始されません。他の方法では、サービスの不足のために、Http.Web要求エラーのためにコードが壊れてしまいます。

+1

2番目の 'process.StartInfo.Arguments'の割り当てが最初のものを上書きします。' + = '(スペースを含む)を意味しましたか? –

+1

あなたは 'process.Start()'を呼んでいません。プロセスは_configure_するだけですが、実行することはありません。 –

+0

2つのコマンドを一度に実行しようとしているようですが、作業ディレクトリを "c:¥users/james/desktop/osrm/osrm-backend/osrm_release"に変更してからコマンドを "osrm – BugFinder

答えて

1

あなたが次のことを試すことができます。またProcess.Start()

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); 
    } 

詳細情報、オリジナルのStartInfo.Argumentsに基づいて、「/Cは」コマンドが実行された後に終了するようにコンソールに通知しますしたがって、「osrm-routed」がコンソールで実行する必要のあるサービスであり、コンソールが終了すると、コンソール自体が終了したときにアプリケーション自体も終了します。

+1

私はそれが動作するのを止めていた '/ c'だと思います。あなたのソリューションは完璧に動作しました。 –

関連する問題