无法使用psexec.exe远程启动进程

时间:2018-04-26 07:17:21

标签: c# console-application psexec

使用psexec.exe远程启动进程时遇到问题。我的解决方案看起来像这样,我在服务器上有一个cmd脚本,它运行我的控制台应用程序。应用程序作业是使用以下代码启动vstest.console.exe的测试运行:

  var config = LoadConfigFromFile<DeploymentStorage>(configFile);

  var currentDateTime = DateTime.Now;
  var resultFileName = String.Format("testresults{0}{1}{2}{3}{4}{5}.trx",
      currentDateTime.Year, currentDateTime.Month, currentDateTime.Day, currentDateTime.Hour, currentDateTime.Minute, currentDateTime.Second);

  ProcessStartInfo processInfo =
      new ProcessStartInfo(config.TestSettings.First(x => x.Key == "MSTestLocation").Value,
      "\"" + config.TestSettings.First(x => x.Key == "TestContainer").Value + "\" /logger:trx;LogFileName=\"" + 
      config.TestSettings.First(x => x.Key == "TestResultLocation").Value + resultFileName + "\"");
  processInfo.CreateNoWindow = true;
  processInfo.UseShellExecute = false;
  processInfo.RedirectStandardError = true;
  processInfo.RedirectStandardOutput = true;

  var process = Process.Start(processInfo);

  process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
      Console.WriteLine("output>>" + e.Data);
  process.BeginOutputReadLine();

  process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
      Console.WriteLine("error>>" + e.Data);
  process.BeginErrorReadLine();

  process.WaitForExit();

  var exitCode = process.ExitCode;

  Console.WriteLine("ExitCode: {0}", exitCode);
  process.Close();

如果我在服务器上运行此脚本一切正常,则测试运行开始。但是如果我在psexec.exe的帮助下通过本地计算机远程启动此脚本,则会出现以下错误:

  

无法排队测试运行&#39; [Servername] 2018-04-24 15:17:20&#39;:无法   启动代理程序。

这不是psexec.exe的问题,使用这个工具我可以运行其他程序和cmd脚本,我也可以用它直接运行vstest.console.exe,但是我需要运行测试我的控制台应用程序。

为什么psexec.exe没有运行我的应用程序?我是否会错过流程配置中的某些内容?

编辑:我在本地计算机上使用以下命令运行psexec.exe:

C:\Programs\PSTools\psexec.exe \\my-server -h C:\TestApp\MyTestTool.exe TEST C:\TestApp\base.config.xml

其中TEST和base.config.xml的路径是传递给控制台应用程序的参数。

编辑2:好吧,似乎我误解了我的问题。我从本地计算机上的命令行运行psexec.exe命令。它应该在服务器上运行名为TestApp的控制台应用程序。服务器上的此控制台应用程序应该在上面的代码的帮助下启动vstest.console.exe,而不是psexec.exe,它无法执行此操作。希望这能使它更清晰。

EDIT3:好的,我现在知道什么是问题,如果我的测试容器是* .orderedtest文件,我无法远程运行测试。如果我尝试运行测试设置一个dll作为测试容器,一切正常。

1 个答案:

答案 0 :(得分:0)

通常,尝试此操作时需要执行一些操作。我之前已经从C#执行过psexec,遗憾的是我不再拥有仅在本地远程执行此操作的代码,但其中一些将适用。

1)您可能需要以管理员权限执行您的应用程序

请参阅此处的答案,了解如何执行此操作:Giving application elevated UAC

2)确保为PSEXEC启用了正确的参数。您需要确保您尝试在远程计算机上执行的用户具有正确的访问权限。

我建议您尝试从提升的本地CMD提示中完全按照您的要求执行PSEXEC,以确保这是正确的。

可在此处找到完整参数:https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

然后在您的代码中确保将PSEXEC指定为FileName,并将其他所有内容指定为参数 确保路径用双引号括起来

这是我用过的一个例子;

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = false;
startInfo.FileName = "C:\Data\Utils\psexec.exe";
startInfo.Arguments = "-u xxxx -p xxxx -accepteula" + " " + "\\\\remotemachine" + " " + "\"c:\\full\\path\\on\\remote\\machine\\myexecuteable.exe\"" + " " + " - other - agrs";
Process nProc = Process.Start(startInfo);
nProc.WaitForExit();