【问题标题】:C# Use Process.Start with parameters AND spaces in pathC# 使用 Process.Start,路径中带有参数和空格
【发布时间】:2017-05-07 17:57:06
【问题描述】:

我见过类似的例子,但找不到与我的问题完全一样的东西。

我需要从 C# 运行这样的命令:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd";
startInfo.Arguments = "/K D:\\as df\\solver\\Swag.Console.exe -f D:\\as df\\solver\\2035.swag -p 5555";
Process.Start(startInfo);

不工作。

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f D:\\as df\\solver\\2035.swag -p 5555";

不工作。

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555";

不工作。

startInfo.FileName = "\"D:\\as df\\solver\\Swag.Console.exe\"";
startInfo.Arguments = " -f \"D:\\as df\\solver\\2035.swag\" -p 5555";

所以它可以工作,但我想 CMD,这可能吗?

【问题讨论】:

  • 我需要的CMD窗口在应用程序结束后没有关闭
  • var proc = Process.Start(startInfo); proc.WaitForExit();
  • 斜体 粗体 proc.WaitForExit();
  • 很遗憾不起作用

标签: c# process path arguments spaces


【解决方案1】:

/K 参数将执行它后面的命令。它可以是用 & 链接的大量命令,但是,这是您在尝试中缺少的,在这种情况下,它们需要用双引号完全括起来。见the SS64 cmd reference

换句话说,命令应该是这样的:

cmd /K " here what ever you want to execute"

由于正斜杠和反斜杠,您很快就会迷失方向。因此,我取出了包裹 String.Format 的外部双引号,因此您的实际命令应该是什么样子变得更加清楚。这是我期望应该工作的代码:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd";
startInfo.Arguments = String.Format(
    "/K \"{0}\"", 
    " \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555");
Process.Start(startInfo);

如果 Swag.Console.Exe 只是将其参数转储到控制台,这将是结果:

-f
D:\as df\solver\2035.swag
-p
5555

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多