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。
我要执行的命令是
"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。