我试图执行的命令是
" 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
选项,但没有留意。
我在这里缺少什么?
答案 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。
无关