因此,我有WCF
服务器在远程计算机上运行。
该服务器接收了简单的字符串作为参数,我希望该参数通过command line
执行。
这是服务器端需要执行command
的功能:
public void ExecuteCmdCommand(string arguments)
{
log.Info(arguments);
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = arguments;
log.Debug(startInfo.Arguments);
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) =>
{
log.Info(args.Data);
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
正如您在本function
开头看到的那样,我将console
打印到收到的command
上。
因此,我尝试通过传递参数notepad
来启动notepad
,我可以通过控制台看到在服务器端收到了该命令,因此我可以确定通信正常,但是没有任何作用发生了。
我做错了什么?我的本地计算机上的同一命令启动notepad
。
更新
确定notepad
可以正常工作(末尾也没有.exe
),但是当我发送命令appium
(我想启动我的appium
服务器)时,我得到了这个错误r
或在将command
发送到server
时(但server
收到了'appium'命令):
System.ServiceModel.FaultException:'服务器无法处理 由于内部错误导致的请求。有关的更多信息 错误,请打开IncludeExceptionDetailInFaults(从 ServiceBehaviorAttribute或来自配置 行为)在服务器上以便发送异常信息 回到客户端,或按照Microsoft .NET打开跟踪 Framework SDK文档,并检查服务器跟踪日志。'
答案 0 :(得分:1)
进程的文件名不正确,“ cmd.exe”。您可以尝试以下方法:
ProcessStartInfo startInfo = new ProcessStartInfo(arguments);
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
,并在参数中传递以下内容:
notepad.exe
有关ProcessStartInfo
类的详细概述,请查看here。
我建议您考虑要传递参数的情况,也要传递一些与要启动的过程相关的参数。例如,您可能要启动记事本并打开文件。该文件也应作为参数传递。因此,我认为一种更好的方法是将arguments
组成一个字符串数组,并遵循以下约定:该数组的第一个元素是您要启动的程序,而数组的其余元素是该程序的参数。