I am experiencing PsExec hang while being executed from a very simple c# or c++ gui program compiled as \"windows application\" (not as \"console application\"). Under sect
Please also set the WorkingDirectory property on startInfo, as Sysinternals utilities use run-time unpacking of files and the kernel is unable to find the unpacked (real) exectutable file.
Build a generic Console Application which runs PsExec
& PsKill
and all of their friends. Call this ConsoleApp through your code instead of calling the NotWorkingPsExec
method, and it'll work just fine.
PSExec was hanging for me too randomly. I haven't put the effort into recreating the issue your way, but I have avoided my troubles by using "PAExec", a seemingly worthy successor in spirit: http://www.poweradmin.com/PAExec/
Synchronous read on the stream works:
ProcessStartInfo startInfo = new ProcessStartInfo("psexec.exe", @"\\localhost cmd.exe /c dir c:\windows\*.*");
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
//startInfo.RedirectStandardError = true;
//startInfo.RedirectStandardInput = true;
Process proc = new Process();
proc.StartInfo = startInfo;
//proc.ErrorDataReceived += new DataReceivedEventHandler(DataReceiveHandler);
//proc.OutputDataReceived += new DataReceivedEventHandler(DataReceiveHandler);
proc.Start();
//proc.BeginErrorReadLine();
//proc.BeginOutputReadLine();
string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
Console.WriteLine(output);
Console.WriteLine("Exit code = {0}", proc.ExitCode);
Even here, note that the ReadToEnd() should be done before the WaitForExit().
I believe PSExec always had problems like this. When running under Java service, we used to redirect the output to nul and couldn't get the output of the running process, but can get the output of PSExec itself.
Refer to below given discussions:
http://forum.sysinternals.com/psexec-always-hangs-when-run-from-java_topic5013.html
http://forum.sysinternals.com/unusual-problem-with-psexecexe_topic6655.html
Edit:
Note on PSEXESVC cleanup: Delete the PSEXESVC.EXE file at C:\Windows ( or C:\Windows\system32 or both ) after killing the hung PSEXESVC process. Lingering process / file cause more problems.
I have a simple solution for this,
C# run the process like:
Process.Start("start run.bat xx.txt"); //call it async
//and then we make some code juse wait xx.txt appear and finish written .
run.bat
is :
psexec.bat > %1 //redirect to a text file
exit
psexec.bat
is:
psexec.exe ..........................
exit
I had a similar problem that was due to the eula, which may be yours:
Possible reasons:
1) psiexec.exe shows EULA message during first run.
2) Permissions
3) dll function can require user session.
To avoid these issues please try following scenarios:
1) with "-accepteula" argument
2) with "-s" argument
3) with "-i" argument
4) > 2 + 3 5) 2 + 3 + 1
See: http://www.appdeploy.com/messageboards/tm.asp?m=72376&mpage=1&key=𑪸
Even though I had checked the EULA several times