C#Process删除引用的参数

时间:2016-09-30 10:10:43

标签: c# .net console-application

我试图执行的命令是

  

" 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:\程序'不被视为内部或外部命令,......

我查看了Here发布的类似问题并尝试了 /s 选项,但没有留意。 我在这里缺少什么?

3 个答案:

答案 0 :(得分:0)

正如错误所说,它正在尝试执行C:\ Program,这基本上意味着你逃避引号的方式有问题。可能试图逃避"使用 - \"

答案 1 :(得分:0)

您要求var fs = require('fs-extra') fs.mkdirs('/tmp/some/long/path/that/prob/doesnt/exist', function (err) { if (err) return console.error(err) console.log("success!") }) fs.mkdirsSync('/tmp/another/path') 运行命令cmd.exe。它将运行C:\Program Files (x86)\MyApp\solr-6.2.0\bin\solr,因为调用"C:\Program Files (x86)\MyApp\solr-6.2.0\bin\solr"会消耗引号。

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

答案 2 :(得分:0)

在/ 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#process api或.net。

无关