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 2754 Plater 7,872
Recognized Expert Expert
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.
Plater 7,872
Recognized Expert Expert
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\\bi n\\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).
Plater 7,872
Recognized Expert Expert
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 following program:
winpop changepwd somename@domain.com SomePassword
I have the folowing code in a .NET app so that I can
change the password using a GUI:
|
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
manuals for the proper techniques to prepare an sqlj program. When I went to
try the sqlj command, I got this:
Exception in thread "main" java.lang.NoClassDefFoundError:
sqlj/tools/Sqlj
|
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 read/write from my application.
The "easy" way to do this would be to spawn an instance of netsh everytime I
need to execute a command, write the command to the input (including a quit
command), and call ReadToEnd on the output. And this does...
|
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 want to use the unix "file" command
(Python's "mimetypes" is not so good for me). But I am stuck on
something about getting that output, and I'd greatly appreciate any
pointers.
|
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 -r$from_label::$to_label neo 2>&1"; //
Hard coded module
DEBUG ("if (!($cvs_fh = popen(\"$cmd\", 'r'))) {");
if (!($cvs_fh = popen("$cmd", 'r'))) {
generate_error("Canot open command \"$cmd\" for reading");
}
|
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 programme:
printf("\nCommand line arguement %d: %s.", i , argv );
The porgramme outputs 3 of the command line arguements, then gives a
segmentation fault on the next line, followed by other strange
|
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 Command Prompt or
Browser or some other application?
Ojas.
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
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 tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
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 protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
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 presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |