C# Process 删除带引号的参数

C# Process removes quoted arguments

我要执行的命令是

"C:\Program Files (x86)\MyAPP\solr-6.2.0\bin\solr" start -f -c -z "10.195.42.93:2181,10.195.42.92:2181" -h 10.195.42.92

并且这个在命令行上工作得很好。

我正在尝试将其作为 C# 进程执行。

注意:如果我删除 IPList

周围的引号,下面的代码可以正常工作
var IPList="10.195.42.93:2181,10.195.42.92:2181";
var hostIP="10.195.42.92"

string command = @"/c ""C:\Program Files (x86)\MyApp\solr-6.2.0\bin\solr"" start -f -c -z """ + IPList + @""" -h " + hostIP;
Process process = new Process();
log.Info("Starting " + command);
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = command;
process.StartInfo = startInfo;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.OutputDataReceived += (s, e) => log.Info(e.Data);
process.ErrorDataReceived += (s, e) => log.Info(e.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();

这会引发错误:

'C:\Program' is not recognized as an internal or external command,...

我查看了 Here 发布的类似问题并尝试了 /s 选项但没有理会。 我在这里错过了什么?

如错误所述,它正在尝试执行 C:\Program,这基本上意味着您转义引号的方式有问题。可能会尝试使用 - \"

来逃避 "

您要求 cmd.exe 运行 命令 C:\Program Files (x86)\MyApp\solr-6.2.0\bin\solr。它会 而不是 运行 "C:\Program Files (x86)\MyApp\solr-6.2.0\bin\solr" 因为引号被 cmd.exe.

的调用消耗了

我不知道解决这个问题的正确方法。您可能需要以某种方式添加转义引号。

在 /c 之后用 "(引号)括起命令解决问题。

示例:

"/c ""c:\prog files\xyz\solr" start -c -z "blah,blah,blah" -h IP "

基本上要执行的命令是

> cmd.exe /c "C:\Program Files (x86)\MyAPP\solr-6.2.0\bin\solr" start -f -c -z "10.195.42.93:2181,10.195.42.92:2181" -h 10.195.42.92

此命令失败,与c#进程无关api或.net。