简体   繁体   中英

Executing command-prompt command in C#

:)

I have a software which can be executed via command line, and now I want it to be executed directly from my C# app. Sadly, there is no error but I still can't do it. :(

The path of.exe file of the software is C:\program files\mysoftware.exe

The command I would like to input is cd c:\program files\mysoftwareFolder enter mysoftware.exe d:\myfolder\file1.xxx d:\myfolder\file2.xxx -mycommand enter exit

The commands above work so well in the actual command prompt, but they just don't work from my C# code.

Here is the code:

        Process cmdprocess = new Process();
        System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo();
        startinfo.FileName = "cmd";
        startinfo.WindowStyle = ProcessWindowStyle.Hidden;
        startinfo.CreateNoWindow = true;
        startinfo.RedirectStandardInput = true;
        startinfo.RedirectStandardOutput = true;
        startinfo.UseShellExecute = false;
        cmdprocess.StartInfo = startinfo;
        cmdprocess.Start();
        System.IO.StreamReader sr = cmdprocess.StandardOutput;
        System.IO.StreamWriter sw = cmdprocess.StandardInput;
        sw.WriteLine(@"echo on");
        sw.WriteLine(@"c:");
        sw.WriteLine(@"cd" +@"program files\mysoftwarefolder");
        sw.WriteLine(@"mysoftware.exe" +@"d:\myfolder\file1.xxx" +@"d:\myfolder\file2.xxx" +@"-mycommand");
        sw.WriteLine(@"exit");
        sw.Close();
        sr.Close();

I guess the incorrect parts might be "startinfo.FileName = "cmd";" or the way I typed the command in the code, but I have no idea how to correct them. :(

Please tell me what I did wrong. I appreciate every answer from you: :)))

UPDATE Thank you for your helps, I tried writing the command in batch file. but it only works in debugging mode. (I forgot to tell you guys that I am developing a web service,) When I run my external project which will use this C# service. it won't work. I don't know whether I should add something to my code or not.

help meeeeee pleaseeeee (T___T)

Write these commands in a batch file and execute the batch file.

In batch file:

cd c:\program files\mysoftwareFolder 
mysoftware.exe
d:\myfolder\file1.xxx
d:\myfolder\file2.xxx -mycommand 
exit

Code:

Process cmdprocess = new Process();
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = "path to batchfile.bat";
startinfo.WindowStyle = ProcessWindowStyle.Hidden;
startinfo.CreateNoWindow = true;
startinfo.RedirectStandardInput = true;
startinfo.RedirectStandardOutput = true;
startinfo.UseShellExecute = false;
cmdprocess.StartInfo = startinfo;
cmdprocess.Start();

Instead of:

startinfo.FileName = "cmd";

Directly use

startinfo.FileName = @"c:\program files\mysoftwarefolder\mysoftware.exe";

Then pass the arguments to the start info as

startinfo.Arguments = @"d:\myfolder\file1.xxx " +@"d:\myfolder\file2.xxx " +@"-mycommand";

So the whole code looks like:

        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = @"c:\program files\mysoftwarefolder\mysoftware.exe";
        p.StartInfo.Arguments = @"d:\myfolder\file1.xxx " +@"d:\myfolder\file2.xxx " +@"-mycommand";
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

If you need to see output from your program you can simply use the output string.

2 things: I think you have spacing problems and you're not reading the result of these commands. cmd is probably telling you..."is not recognized as an internal or external command"

If you look at what you're throwing at cmd, it will be:

echo on

c:

cdprogram files\mysoftware folder

mysoftware.exed:\myfolder\file1.xxx

That won't work when you try it in cmd. CMD is almost certainly kicking back error messages at you, but you're never reading from sr so you'll never know it. I'd add in some spaces and include all the paths in quotes internally like so:

sw.WriteLine(@"echo on");
sw.WriteLine(@"c:");
sw.WriteLine("cd \"program files\\mysoftwarefolder\"");
sw.WriteLine("mysoftware.exe \"d:\\myfolder\\file1.xxx\" d:\\myfolder\\file2.xxx\" -mycommand");
sw.WriteLine(@"exit");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM