problems with stdout and psexec.exe from sysinternals
<p>i have searched and read about issues with psexec.exe from sysinternals not working properly with c# and stdout. i am now trying to figure out how to just call a batch file that has the following instead of using System.Diagnostics.Process to call psexec:</p>

<p>test.bat contains the following line:</p>

<pre><code>psexec.exe \\hostname -u user -p password ipconfig /all &gt;c:\test.txt
</code></pre>

<p>test.txt will be saved on the host where i am running my c sharp app and executing psexec.</p>

<p>when i execute the following:</p>

<pre><code>System.Diagnostics.Process psexec_run = new System.Diagnostics.Process();
psexec_run.StartInfo.FileName = "cmd.exe";
psexec_run.StartInfo.Arguments = @"/c """ + cur_dir + @"\test\test.bat""";
psexec_run.StartInfo.UseShellExecute = false;
psexec_run.Start();
psexec_run.WaitForExit();
</code></pre>

<p>i see the cmd window pop up and it runs something but not sure what and goes away.</p>

<p>if i execute the following:</p>

<pre><code>System.Diagnostics.Process psexec_run = new System.Diagnostics.Process();
psexec_run.StartInfo.FileName = cur_dir + "\\test\\psexec.exe";
psexec_run.StartInfo.Arguments = @"\\hostname -u user -p password ipconfig /all";
psexec_run.StartInfo.UseShellExecute = false;
psexec_run.Start();
psexec_run.WaitForExit();
</code></pre>

<p>then i see the command window open and it runs psexec which takes quite a few secs and i quickly see my output i need, but i have no way of capturing the output or writing it to a file.</p>

<p>i guess my issue now is since psexec will not work with stdout how can i capture the output from the psexec command to write it to a file???</p>

<p>see the following link for the issues with psexec, the last reply on this url mentioned a way to write the process output to a file without using stdout, i'm newbie to c# i can't figure out how to write process output without use stdout :(</p>

<p><a href="http://forum.sysinternals.com/psexec-fails-to-capture-stdout-when-launched-in-c_topic19333.html" rel="nofollow">http://forum.sysinternals.com/psexec-fails-to-capture-stdout-when-launched-in-c_topic19333.html</a></p>

<p>based on response below i tried the following:</p>

<pre><code>ProcessStartInfo psi = new ProcessStartInfo(cur_dir + "\\test\\psexec.exe",    @"\\hostname -u user -p password ipconfig /all");                   
psi.RedirectStandardOutput = true;         
psi.RedirectStandardError = true;         
psi.UseShellExecute = false;          
Process p = Process.Start(psi);          
StreamReader myStreamReader = p.StandardOutput;          
// Read the standard output of the spawned process.                         
string sOutput = myStreamReader.ReadToEnd(); 
</code></pre>

<p>i did ReadToEnd so i would make sure it got all the output, it DID NOT!! for some reason it only go the first line of ipconfig output that was it. Also the cmd window it opened up never closed for some reason. even with CreateNoWindow=true the code just hangs. so again something is wrong with psexec and stdout i think?? as i can run this code just fine using ipconfig /all command on the local host and not use psexec...</p>

<p>again i am looking to avoid stdout and somehow find a way to get the output from this command or unless there is something else i'm over looking? also, not to make more work for anyone, but if you d/l psexec.exe from sysinternals and test it with a command on a remote host you will see. i have spent 2 days on this one :( trying to figure out how to use psexec or find some other quick method to execute remote command on a host and get ouptput.</p>

<p>UPDATE:</p>

<p>i gave up on psexec in c# code, i saw many posts about psexec eating the output, having a child window process ,etcc
until my head hurt :) so i am trying to run a batch file and output to a file and it's not making sense...</p>

<p>i have a batch file test.bat with the following</p>

<pre><code>psexec.exe \\\hostname -u name -p password ipconfig /all &gt;c:\test.txt
</code></pre>

<p>when i run the following code:</p>

<pre><code>ProcessStartInfo psi = new ProcessStartInfo(cur_dir + @"\test\test.bat");

psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);

p.WaitForExit();
</code></pre>

<p>the cmd windows comes and goes really quickly and the test.txt file is created but is 0 bytes no info in it.</p>

<p>so if i run the batch file in a windows cmd line with the psexec command it works perfectly fine!!???</p>

<p>so then to verify psexec was the issue i changed the batch file to:</p>

<pre><code>ipconfig /all &gt;c:\test.txt
</code></pre>

<p>i execute my code above and it works fine creates the output in the test.txt file..???!!!!</p>

<p>why is not working with psexec am i missing something? if it's psexec, does anyone have
any recommendations for how i can execute a command on a remote windows host and get me the
output???</p>
