2016-08-04 3 views
0

J'héberge actuellement OSRM localement sur ma machine pour construire une application de routage. Lorsque l'application démarre, un bool ServiceAvailable est vérifié avec une requête de test pour voir si l'application est disponible et s'exécute localement. Je veux être en mesure de démarrer l'application OSRM si ce bool retourne false. J'ai trouvé un StackOverflow link avec un problème similaire et j'ai essayé de l'implémenter, mais l'application ne se charge pas. Voici mon code actuel:Exécution d'une commande cmd à partir de mon code 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"; 
    } 

La méthode est exécutée mais le service ne démarre jamais. Dans d'autres méthodes, mon code se brise en raison d'une erreur de demande Http.Web, en raison de l'absence du service.

+1

La deuxième affectation 'process.StartInfo.Arguments' écrase la première, vouliez-vous dire' + = '(avec un espace)? –

+1

Et vous n'appelez pas 'process.Start()'. Vous ne configurez que le processus, mais ne l'exécutez jamais. –

+0

il semble que vous essayez d'exécuter 2 commandes en une seule fois, pourquoi ne pas changer le répertoire de travail pour être "c: \ users/james/bureau/osrm/osrm-backend/osrm_release" et ensuite la commande serait "osrm -routed wales-latest.osrm "au lieu d'un paramètre – BugFinder

Répondre

1

Vous pouvez essayer ce qui suit:

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

Plus d'info sur Process.Start()

également, en fonction de vos StartInfo.Arguments d'origine, le « /C » dit de mettre fin à la console après la commande a été exécutée Par conséquent, si le "osrm-routed" est le service qui doit s'exécuter dans la console et que la console est terminée, l'application se terminera également à la fin de la console.

+1

Je pense que c'était le '/ c' qui empêchait cela de fonctionner. Votre solution a parfaitement fonctionné, merci. –