我见过类似的例子,但找不到与我的问题完全相同的东西。
我需要从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,这可能吗?
答案 0 :(得分:3)
/ 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