Solved

C# running external command prompt programs on C# programs

Posted on 2010-11-10
8
1,031 Views
Last Modified: 2013-12-17
Hi there! I am trying to allow my C# program to run an external perl script and output the results on a rich text box on a form. The problem arises with an error of:

Unhandled Exception: System.ComponentModel.Win32Exception: The system cannot fin
d the file specified
   at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startI
nfo)
   at System.Diagnostics.Process.Start()
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start(String fileName, String arguments)
   at ConsoleCommands.Program.Main(String[] args) in C:\Users\Aaron\Desktop\Sys
crawl\ConsoleCommands\ConsoleCommands\Program.cs:line 14

My codes as the following:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;


namespace ConsoleCommands
{
    class Program
    {
        static void Main(string[] args)
        {
            Process.Start("perl.exe", "C:\\syscrawl\\ftk\\bin\\mactime.pl -b testing.bodyfile -z UCT-8 > testing.txt");
        }
    }
}

Open in new window


When running the command purely on the CMD it works perfectly! Can someone please guide me to the problem? And can you please provide some clues for the output of the results to a rich text box for the C# form? Thanks!
0
Comment
Question by:VMthinker
  • 3
  • 3
8 Comments
 
LVL 19

Accepted Solution

by:
arif_eqbal earned 300 total points
ID: 34109495
looks like you need to specify the path to Perl.exe
i think when you say it runs fine from cmd prompt you would already be in the path where this exe lies...
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 34109588
or is perl.exe is already in $PATH then you could try:
Process process = new Process();
process.StartInfo.Filename = "C:\\syscrawl\\ftk\\bin\\mactime.pl"
process.StartInfo.Arguments = "-b testing.bodyfile -z UCT-8 > testing.txt";
process.ShellExecute = false;
process.RedirectStandardOutput = true;
process.Start();

System.IO.StreamReader reader = process.StandardOutput;  
string sRes = reader.ReadToEnd();  
reader.Close(); 

Open in new window

0
 
LVL 52

Assisted Solution

by:Carl Tawn
Carl Tawn earned 200 total points
ID: 34109592
Actually, scratch that, you still need perl.exe if you want to catch the output:
Process process = new Process();
process.StartInfo.Filename = "C:\\path_to_perl\\perl.exe";
process.StartInfo.Arguments = "C:\\syscrawl\\ftk\\bin\\mactime.pl -b testing.bodyfile -z UCT-8 > testing.txt";
process.ShellExecute = false;
process.RedirectStandardOutput = true;
process.Start();

System.IO.StreamReader reader = process.StandardOutput;  
string sRes = reader.ReadToEnd();  
reader.Close();  

Open in new window

0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
LVL 2

Author Comment

by:VMthinker
ID: 34133628
Carl your codes were all wrong!

It should be something like this:

ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = "C:\\path_to_perl\\perl.exe";
            startInfo.Arguments = "C:\\syscrawl\\ftk\\bin\\mactime.pl -b testing.bodyfile -z UCT-8 > testing.txt";
            startInfo.UseShellExecute = false;
            startInfo.RedirectStandardOutput = true;
            Process.Start(startInfo);

Open in new window


Please submit codes that VS 2010 can read. Thanks!
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 34134303
The code was not ALL wrong!! Ok, a couple of the properties belong to the StartInfo, but that's what you get coding from memory!!

The rest is correct, and you obviously managed to figure it out for yourself, so hey maybe you learned something.
0
 
LVL 2

Author Comment

by:VMthinker
ID: 34134977
The error still remains?.....
0
 
LVL 2

Author Closing Comment

by:VMthinker
ID: 34136821
No complete codes were given.
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question