【问题标题】:Running a cmd command from within my C# code从我的 C# 代码中运行 cmd 命令
【发布时间】:2016-08-04 13:26:58
【问题描述】:

我目前在我的机器上本地托管OSRM 以构建路由应用程序。当应用程序启动时,将使用测试查询检查bool ServiceAvailable,以查看应用程序是否可用并在本地运行。如果 bool 返回 false,我希望能够启动 OSRM 应用程序。我发现StackOverflow link 有类似的问题并尝试实现它,但应用程序无法加载。这是我当前的代码:

    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 请求错误而中断。

【问题讨论】:

  • 第二个process.StartInfo.Arguments 赋值覆盖了第一个,你的意思是+=(带空格)吗?
  • 而且你不要打电话给process.Start()。您只配置该进程,但从不运行它。
  • 看起来你正在尝试一次运行 2 个命令,为什么不将工作目录更改为 "c:\users/james/desktop/osrm/osrm-backend/osrm_release" 和那么命令将是“osrm-routed wales-latest.osrm”而不是参数
  • 我在方法的末尾添加了process.Start(),并将当前工作目录设置为osrm_release 目录,但它仍然没有运行命令。我将osrm-routed... 更改为explorer .,这样它就可以打开当前目录并且什么都没有发生。

标签: c# cmd osrm


【解决方案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”是需要在控制台中运行的服务,并且控制台终止,那么应用程序本身也会在控制台终止时终止。

【讨论】:

  • 我认为是 /c 阻止了它的工作。您的解决方案完美运行,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
相关资源
最近更新 更多