2016-09-30 62 views
-1

我想执行的命令是C#过程中除去报价参数

“C:\ Program Files文件(x86)的\ MYAPP \ Solr的-6.2.0 \ BIN \ Solr的” 开始-f -c -z “10.195.42.93:2181,10.195.42.92:2181” -h 10.195.42.92

作品就好在命令行

我试图执行此为C#进程。

注:

'C:\ PROGRAM' 不被识别为一个内部或外部下面的代码,如果我删除周围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(); 

给出的报价抛出错误工作正常命令,...

我已经看了发表的类似问题Here并试过t他/s选项,但不理会。 我在这里失踪了什么?

+1

为什么不把命令参数放在[ProcessStartInfo.Arguments](https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v = vs.110) .aspx)属性? – stuartd

+1

在命令行上工作的命令没有类似'/ c'的命令,但是在代码中你的命令以'/ c'开始,这实际上看起来像一个命令行参数。 – RBT

+0

是@RBT,它是cmd.exe的一个选项。/C执行由字符串指定的命令,然后终止。 – Karthik

回答

0

内附使用命令“(引号)后/ C解决问题

例子:

。 “/ C “C:\ PROG文件\某某\ Solr的” 开始 - ç-z “等等,等等,等等” -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#process api或.net没有关系。

0

正如错误说的那样,它试图执行C:\ Program程序,这基本上意味着您正在转义引号的方式有问题。可能会试图逃跑“使用 - ”

0

您要求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消耗的。

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