WCF:如何在远程计算机上启动简单的cmd命令

时间:2019-04-07 07:34:46

标签: c# wcf cmd

因此,我有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文档,并检查服务器跟踪日志。'

1 个答案:

答案 0 :(得分:1)

进程的文件名不正确,“ cmd.exe”。您可以尝试以下方法:

ProcessStartInfo startInfo = new ProcessStartInfo(arguments);
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;

,并在参数中传递以下内容:

notepad.exe

有关ProcessStartInfo类的详细概述,请查看here

我建议您考虑要传递参数的情况,也要传递一些与要启动的过程相关的参数。例如,您可能要启动记事本并打开文件。该文件也应作为参数传递。因此,我认为一种更好的方法是将arguments组成一个字符串数组,并遵循以下约定:该数组的第一个元素是您要启动的程序,而数组的其余元素是该程序的参数。