C# 将 Process.Start 与路径中的参数和空格一起使用

C# Use Process.Start with parameters AND spaces in path

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

我需要 运行 来自 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,这可能吗?

/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\solver35.swag
-p
5555