【发布时间】:2019-04-07 15:56:45
【问题描述】:
所以我有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 服务器)我得到这个err或发送时command 到 server (但 server 收到 'appium' 命令):
System.ServiceModel.FaultException: '服务器无法处理 由于内部错误导致的请求。有关更多信息 错误,要么打开 IncludeExceptionDetailInFaults(要么来自 ServiceBehaviorAttribute 或来自配置 行为)在服务器上以发送异常信息 返回客户端,或根据 Microsoft .NET 打开跟踪 框架 SDK 文档并检查服务器跟踪日志。'
【问题讨论】:
-
该服务是否托管在 IIS 中?还是windows服务?根据这些托管进程的配置方式,您可能不会“看到”记事本,因为它们可能未启用连接到它们的显示器。如果您发送参数“/c dir c: > c:\temp\somedir.txt”(假设 c:\temp 确实存在并且对每个人都是可写的)在调用服务后您能找到 somedir.txt 吗?
-
在该服务器端代码中添加 try/catch 并记录错误。或者在服务器上启用 WCF 跟踪以记录异常详细信息。:docs.microsoft.com/en-us/dotnet/framework/wcf/diagnostics/…
-
“系统找不到指定的文件”虽然我手动尝试时识别了appium
-
您的服务没有正确的 PATH 设置。尝试使用完整路径。请记住,服务不需要在其个人资料中具有相同的设置或访问用户拥有的相同文件夹。从服务的角度来看,您可以运行某些东西没有任何意义。