使用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作为测试容器,一切正常。
答案 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();