PSExec зависает при запуске теста, но отлично работает на сеансе отладки - PullRequest
0 голосов
/ 04 января 2012

Когда я запускаю код в режиме отладки, тест завершается, когда я запускаю его в тесте запуска, ps exec кажется зависает и никогда не возвращается, я также помещаю уничтожение на место, но оно никогда не завершается.

почему это завершается при отладке, а не в режиме выполнения.

есть ли здесь что-нибудь глупое, чего мне не хватает?

public class RemoteExeInvokerTask :IQaTask
{

  public string TargetHostName { get; set; }
  public string TargetHostUserName { get; set; }
  public string TargetPassword { get; set; }
  public string TargetExecutableWithParams { get; set; }


  public string DoWork()
  {
    string psExecUtility =  Path.GetDirectoryName(Assembly
                                                  .GetExecutingAssembly()
                                                  .Location)
                            + "\\PsTools\\psExec.exe";


    string quotedArgs = string.Format("\\\\{0} -u {1} -p {2} {3} ",
                                      TargetHostName,
                                      TargetHostUserName,
                                      TargetPassword,
                                      TargetExecutableWithParams);


    ProcessStartInfo processInfo = new ProcessStartInfo(psExecUtility, quotedArgs);
    processInfo.RedirectStandardError = true;
    processInfo.RedirectStandardOutput = true;
    processInfo.UseShellExecute = false;
    processInfo.CreateNoWindow = true;
    Process process = Process.Start(processInfo);

    process.WaitForExit();
    string error = process.StandardError.ReadToEnd();
    string output = process.StandardOutput.ReadToEnd();
    int exitCode = process.ExitCode;
    process.Close();

    if (Process.GetProcessById(process.Id) != null)
    {
      process.Kill();
    }




    if (exitCode <= -1)
    {
      string errorMessage = string.Format("Process Exited with ErrorMessge {0} {1} "
                                          + "OutputMessage {2}",
                                          error,
                                          Environment.NewLine,
                                          output);

      throw new MyApplicationException(errorMessage);
    }

      return output;
  }

Тестовый код.

[Test]
[ExpectedException(typeof(MyApplicationException))]
[Description("Expect a exception message form the Server.")]
public void RemoteInvokeOfJobWrapperFromCommandLine()
{
  RemoteExeInvokerTask task = new RemoteExeInvokerTask {
                                TargetHostName = "Serverd02",
                                TargetHostUserName = @"corp\username",
                                TargetPassword = @"password",
                                TargetExecutableWithParams = @" E:\D01\Home.Framework.JobExecutionEngine\Home.Framework.JobexecutionEngine.exe 99999  1"};

  string value = task.DoWork();
  Assert.IsNotNull(value);
}

1 Ответ

0 голосов
/ 04 января 2012

в основном замените, где у вас есть "\" двойная косая черта с @ перед переменной, например

what if you change string 
quotedArgs = string.Format("\\\\{0} -u {1} -p {2} {3} " 

, чтобы читать как это
string quotedArgs = string.Format (@ "{0}-u {1} -p {2} {3} "или

string quotedArgs = string.Format("{0} -u {1} -p {2}{3} ",
@TargetHostName,
@TargetHostUserName,
@TargetPassword,
@TargetExecutableWithParams4

также заменить строку psExecUtility = Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location) +" \ PsTools \ psExec.exe ";

что-то вроде этого

string psExecUtility =  Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "@PathandExName 

// которое должно быть переменной для этого "\ PsTools \ psExec.exe";

...