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..... -
public class CommandLineUtils : ICommandLineUtils
-
{
-
private static readonly ILog log = LogManager.GetLogger(typeof(CommandLineUtils));
-
-
private StringBuilder processStdOutput = null;
-
-
///
-
/// <summary>
-
/// Executes an Interwoven command line utility
-
/// </summary>
-
/// <param name="clt">The utility to execute</param>
-
/// <param name="args">Any arguments to pass on the command line</param>
-
/// <returns>The string of output, as produced by running the command</returns>
-
///
-
public string ExecIwovCLT(string clt, string args)
-
{
-
log.Debug("Executing command: '" + clt + " " + args + "'");
-
processStdOutput = new StringBuilder("");
-
-
-
Process proc = new Process();
-
proc.StartInfo.FileName = clt;
-
proc.StartInfo.Arguments = args;
-
proc.StartInfo.UseShellExecute = false;
-
proc.StartInfo.RedirectStandardOutput = true;
-
proc.StartInfo.RedirectStandardError = true;
-
-
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
-
proc.ErrorDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
-
-
try
-
{
-
proc.Start();
-
proc.BeginOutputReadLine();
-
proc.WaitForExit();
-
log.Debug("I read this from our process: \n" + processStdOutput.ToString());
-
}
-
catch (Win32Exception ex)
-
{
-
log.Error("Could not execute the '" + clt + " " + args + "' command");
-
log.Error(ex.ToString());
-
}
-
finally
-
{
-
proc.Close();
-
}
-
-
return processStdOutput.ToString();
-
}
-
-
-
///
-
/// <summary>
-
/// Event handler for process execution method (above)
-
/// </summary>
-
/// <param name="sendingProcess">process doing the outputting</param>
-
/// <param name="outLine">output line from the process</param>
-
///
-
private void proc_OutputDataReceived(object sendingProcess,
-
DataReceivedEventArgs outLine)
-
{
-
if (!String.IsNullOrEmpty(outLine.Data))
-
{
-
processStdOutput.Append(outLine.Data + Environment.NewLine);
-
}
-
}
-
}
-
}
-
6 2724
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?
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: - 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.
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?
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: - Executing command: 'C:\Interwoven\TeamSite\bin\iwgetwfobj.exe 123'
-
I read this from our process:
-
-
2008-01-04 11:08:18,583 DEBUG The process exit code is: '1'
-
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).
Did you run the ps.exe process in the same manor? capturing it's output(s) and setting shellexecute to false?
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. -
public string GetReviewTaskOwner(int taskid)
-
{
-
//
-
// FIXME remove this ps.exe debugging call:
-
//
-
string testcommand = "C:\\cygwin\\bin\\ps.exe";
-
string testoutput = clUtils.ExecIwovCLT(testcommand, "");
-
log.Debug("The testoutput of running " + testcommand + " is \n'" + testoutput + "'\n");
-
-
//
-
// This is where the iwgetwfobj call is made
-
//
-
string fullPathClt = Path.Combine(iwbin, iwgetwfobj);
-
string args = "" + taskid;
-
string commandLineOutput = clUtils.ExecIwovCLT(fullPathClt, args);
-
-
string owner = getOwnerFromWfObjXML(commandLineOutput);
-
-
return owner;
-
}
Sign in to post your reply or Sign up for a free account.
Similar topics
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...
|
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.
|
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...
|
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...
|
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,
|
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...
|
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...
|
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...
|
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...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
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
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
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...
|
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...
|
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,...
|
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...
|
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...
|
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...
| |