Issues with running a PsExec process from code

lysergic-acid picture lysergic-acid · Jul 25, 2011 · Viewed 8.3k times · Source

I am experiencing a weird issue when attempting to run a .NET command line tool remotely using PsExec.

  1. When running PsExec from command line, it runs and completes fine.

  2. When running it from a console application (creating a process, running PsExec.exe with the necessary arguments to it) -- it is running OK.

  3. When running it from our in house custom tool that is used to run different tasks, it either times out or does not complete successfully.

Here is the code i am using:

Process p = new Process();

p.StartInfo.FileName = @"C:\PsExec.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

string arg = "-snapshot -display C:\*.msi -s";

p.StartInfo.Arguments = @"\\10.161.203.106 -u user -p pwd -cf C:\FVT.exe " + arg;

Logger.Info(this, "Starting process");

p.Start();
var ended = p.WaitForExit(60 * 1000);

if (!ended)
{
    throw new Exception("Process timed out.");
}

Logger.Info(this, "Process ended");

using (StreamReader sr = p.StandardOutput)
{
    string buffer = sr.ReadToEnd();
    Logger.Info(this, buffer);
}

This code runs fine from cmd line, or from a standalone app!

I have no idea what else could be wrong here.

Our in house tool spawns a new thread and runs this code in it.

Update:

command line + args in command line window -- working. Same cmd + args, run as a Process with RedirectOutput - stalls and returns on timeout.

Could this be a bug in .NET ? (this happens for other progarms, batch files, etc).

Answer

Sonny picture Sonny · Sep 27, 2012

try adding -accepteula to your arguments to psexec