2016-08-04 5 views
0

В настоящее время я размещаю на моей машине OSRM, чтобы создать приложение маршрутизации. Когда приложение запускается, bool ServiceAvailable проверяется с помощью тестового запроса, чтобы узнать, доступно ли приложение и выполняется ли оно на месте. Я хочу, чтобы иметь возможность запустить приложение OSRM, если это bool возвращает false. Я нашел StackOverflow link с аналогичной проблемой и попытался ее реализовать, но приложение не загружается. Вот мой текущий код:Выполнение команды cmd изнутри кода C#

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

Второе задание 'process.StartInfo.Arguments' перезаписывает первое, вы имели в виду' + = '(с пробелом)? –

+1

И вы не называете 'process.Start()'. Вы только _configure_ процесс, но никогда не запускаете его. –

+0

похоже, что вы пытаетесь запустить 2 команды за один раз, почему бы не изменить рабочий каталог как «c: \ users/james/desktop/osrm/osrm-backend/osrm_release», а затем команда будет «osrm -routed wales-latest.osrm ", а не параметр – BugFinder

ответ

1

Вы можете попробовать следующее:

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

Более подробную информацию о Process.Start()

Кроме того, на основе ваших оригинальных StartInfo.Arguments, то «/C» говорит утешать прекратить после того, как команда была выполнена , поэтому, если «osrm-routed» - это служба, которая должна запускаться в консоли, а консоль завершается, то само приложение также прекращается, когда консоль завершается.

+1

Я думаю, что это был '/ c', который останавливал это от работы. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^