473,406 Members | 2,387 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

C#/IIS : Command line ouput can't be read when running under IIS

Hi,

I have some code that I want to use to run a command line utility and I want to be able to run it from an aspx page running under IIS. The command line utility is a local utility running on the same box as my IIS server, and the code works in Visual Studio, just not under IIS. Any suggestions?

The logs are totally silent on the issue. On line 36 (below), the log says:
"I read this from our process:" . . . .just blank after that.

Grrrr.....


Expand|Select|Wrap|Line Numbers
  1.     public class CommandLineUtils : ICommandLineUtils
  2.     {
  3.         private static readonly ILog log = LogManager.GetLogger(typeof(CommandLineUtils));
  4.  
  5.         private StringBuilder processStdOutput = null;
  6.  
  7.         /// 
  8.         /// <summary>
  9.         /// Executes an Interwoven command line utility
  10.         /// </summary>
  11.         /// <param name="clt">The utility to execute</param>
  12.         /// <param name="args">Any arguments to pass on the command line</param>
  13.         /// <returns>The string of output, as produced by running the command</returns>
  14.         /// 
  15.         public string ExecIwovCLT(string clt, string args)
  16.         {
  17.             log.Debug("Executing command: '" + clt + " " + args + "'");
  18.             processStdOutput = new StringBuilder("");
  19.  
  20.  
  21.             Process proc = new Process();
  22.             proc.StartInfo.FileName = clt;
  23.             proc.StartInfo.Arguments = args;
  24.             proc.StartInfo.UseShellExecute = false;
  25.             proc.StartInfo.RedirectStandardOutput = true;
  26.             proc.StartInfo.RedirectStandardError = true;
  27.  
  28.             proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
  29.             proc.ErrorDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
  30.  
  31.             try
  32.             {
  33.                 proc.Start();
  34.                 proc.BeginOutputReadLine();
  35.                 proc.WaitForExit();
  36.                 log.Debug("I read this from our process: \n" + processStdOutput.ToString());
  37.             }
  38.             catch (Win32Exception ex)
  39.             {
  40.                 log.Error("Could not execute the '" + clt + " " + args + "' command");
  41.                 log.Error(ex.ToString());
  42.             }
  43.             finally
  44.             {
  45.                 proc.Close();
  46.             }
  47.  
  48.             return processStdOutput.ToString();
  49.         }
  50.  
  51.  
  52.         /// 
  53.         /// <summary>
  54.         /// Event handler for process execution method (above)
  55.         /// </summary>
  56.         /// <param name="sendingProcess">process doing the outputting</param>
  57.         /// <param name="outLine">output line from the process</param>
  58.         /// 
  59.         private void proc_OutputDataReceived(object sendingProcess,
  60.                                              DataReceivedEventArgs outLine)
  61.         {
  62.             if (!String.IsNullOrEmpty(outLine.Data))
  63.             {                
  64.                 processStdOutput.Append(outLine.Data + Environment.NewLine);
  65.             }
  66.         }
  67.     }
  68. }
  69.  
Jan 3 '08 #1
6 2724
Plater
7,872 Expert 4TB
I don't see anywhere where you actually read the data from the process (the in/out/error streams)
I see you have the eventhandlers, but they don't seem to ever look at the streams?
Jan 4 '08 #2
I don't see anywhere where you actually read the data from the process (the in/out/error streams)
I see you have the eventhandlers, but they don't seem to ever look at the streams?
The line:
Expand|Select|Wrap|Line Numbers
  1. processStdOutput.Append(outLine.Data + Environment.NewLine);
is appending Stdout and Stderr lines to a StringBuffer class member variable.

I know that part works (i.e. that I can actually read stuff from a command line handle) because when I run this in my IDE and I try executing the DOS command "date" (for example), I can read the process' output and I echo the correct time.

When I move this code in to IIS, however, I just read nothing. . .an empty line.

BTW, I found out that the exit code of the Process is "1", but that's all the info I can get...it isn't throwing an exception or telling me why it's erroring out.
Jan 4 '08 #3
Plater
7,872 Expert 4TB
Yeah, sorry, I went crosseyed and realized I was reading the eventhandlers wrong (oops).

Even if it exited with a zero, shouldn't it dump data into the error stream?

Maybe it never actually executed the file you are trying to run. Like if you tried to run a .vbs file but didn't have vbscript support on the computer. It wouldn't return any data to the in/out/error streams because it couldn't do anything, that would return a non-zero value for the return code.
Have you tried manually running the process on the IIS server machine?
Jan 4 '08 #4
Yeah, sorry, I went crosseyed and realized I was reading the eventhandlers wrong (oops).

Even if it exited with a zero, shouldn't it dump data into the error stream?

Maybe it never actually executed the file you are trying to run. Like if you tried to run a .vbs file but didn't have vbscript support on the computer. It wouldn't return any data to the in/out/error streams because it couldn't do anything, that would return a non-zero value for the return code.
Have you tried manually running the process on the IIS server machine?
Yep, in my logs, I echo exactly what I'm trying to run:
Expand|Select|Wrap|Line Numbers
  1. Executing command: 'C:\Interwoven\TeamSite\bin\iwgetwfobj.exe 123'
  2. I read this from our process: 
  3.  
  4. 2008-01-04 11:08:18,583 DEBUG The process exit code is: '1'
  5.  
So if I copy and paste the command onto a DOS prompt on that server, I get the expected output (about 20 lines of XML).

Weird, huh?

To make things more weird, I even tried running some other command just before the iwgetwjobj command....and that works!

Just before I try running the iwgetwjobj.exe, I run "c:\\cygwin\\bin\\ps.exe" and it returns a list of processes currently running on that server, and that works when I run it on the command line, from within my IDE, and (crucially) while running under IIS.

So I'm really kind of stuck as to why one exe will work and the other won't.
Both exe's have the same permissions (Everyone has Full Control).
Jan 4 '08 #5
Plater
7,872 Expert 4TB
Did you run the ps.exe process in the same manor? capturing it's output(s) and setting shellexecute to false?
Jan 4 '08 #6
Did you run the ps.exe process in the same manor? capturing it's output(s) and setting shellexecute to false?
Yep; exactly the same method used in both cases.
Expand|Select|Wrap|Line Numbers
  1.         public string GetReviewTaskOwner(int taskid)
  2.         {
  3.             //
  4.             // FIXME remove this ps.exe debugging call:
  5.             //
  6.             string testcommand = "C:\\cygwin\\bin\\ps.exe";
  7.             string testoutput = clUtils.ExecIwovCLT(testcommand, "");
  8.             log.Debug("The testoutput of running " + testcommand + " is \n'" + testoutput + "'\n");
  9.  
  10.             //
  11.             //  This is where the iwgetwfobj call is made
  12.             //
  13.             string fullPathClt = Path.Combine(iwbin, iwgetwfobj);            
  14.             string args = "" + taskid;
  15.             string commandLineOutput = clUtils.ExecIwovCLT(fullPathClt, args);
  16.  
  17.             string owner = getOwnerFromWfObjXML(commandLineOutput);
  18.  
  19.             return owner;
  20.         }
Jan 4 '08 #7

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: Nicholas Then | last post by:
I am writing an application that will call a command line application. Basically I have set up the windows 2003 POP3/SMTP service and to change a password of a mailbox, I need to execute the...
3
by: James D. Marshall | last post by:
Please point me to some articles that explain how to execute a dos type command and retrieve its output for processing. Thanks.
12
by: Rhino | last post by:
I am having an odd problem: the sqlj command on my system doesn't work. I am running DB2 (LUW) V8 (FP8) on WinXP. I haven't done an sqlj program since Version 6 of DB2 (LUW) so I checked the...
2
by: Adam Clauss | last post by:
I am building a GUI to wrap around some of the information/abilities contained within the program netsh. I have figured out how to use redirect the standardinput and standardoutput so that I can...
5
by: calmar | last post by:
Hi all, unfotunately, 'commands.getstatusoutput(command)' does not work under windows. Would there be any alternative? os.system also just provides the exit number I think. thanks a lot,
2
by: Jim | last post by:
Hello, I need a program that will traverse a directory tree to ensure that there are unix-style line endings on every file in that tree that is a text file. To tell text files from others I...
5
by: qazwart | last post by:
I am reading from a "cvs rlog" command, and I need both the STDOUT and STDERR. Unfortunately, something very strange is happening. If I do this: $cmd = "$cvs_cmd -q rlog -NS...
17
by: Matt | last post by:
Hello. I'm having a very strange problem that I would like ot check with you guys. Basically whenever I insert the following line into my programme to output the arguments being passed to the...
51
by: Ojas | last post by:
Hi!, I just out of curiosity want to know how top detect the client side application under which the script is getting run. I mean to ask the how to know whether the script is running under...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.