在C#中执行命令提示符命令

时间:2011-08-13 16:40:44

标签: c# command-line command-prompt

:)

我有一个可以通过命令行执行的软件,现在我想让它直接从我的C#app执行。可悲的是,没有错误,但我仍然无法做到。 :(

该软件的.exe文件路径为C:\ program files \ mysoftware.exe

我想输入的命令是 cd c:\ program files \ mysoftwareFolder 输入 mysoftware.exe d:\ myfolder \ file1.xxx d:\ myfolder \ file2.xxx -mycommand 输入 出口

上面的命令在实际的命令提示符下工作得很好,但它们只是不能用我的C#代码工作。

以下是代码:

        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();

我猜不正确的部分可能是“startinfo.FileName =”cmd“;”或者我在代码中输入命令的方式,但我不知道如何纠正它们。 :(

请告诉我我做错了什么。我感谢你的每一个答案! :)))

更新感谢您的帮助!我尝试在批处理文件中编写命令,但它只能在调试模式下工作。 (我忘了告诉大家我正在开发一个Web服务。)当我运行我将使用这个C#服务的外部项目时,它将无法工作。我不知道是否应该在代码中添加内容。

帮助meeeeee pleaseeeee(T ___ T)

3 个答案:

答案 0 :(得分:2)

将这些命令写入批处理文件并执行批处理文件。

在批处理文件中:

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

代码:

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();

答案 1 :(得分:2)

而不是:

startinfo.FileName = "cmd";

直接使用

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

然后将参数传递给开始信息

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

所以整个代码看起来像:

        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();

如果您需要查看程序的输出,只需使用输出字符串即可。

答案 2 :(得分:1)

2件事:我认为你有间距问题而且你没有阅读这些命令的结果。 cmd可能告诉你......“不被认为是内部或外部命令”

如果你看看你在cmd投掷什么,它将是:

  

回显

     

c:

     

cdprogram files \ mysoftware文件夹

     

mysoftware.exed:\ MyFolder文件\ file1.xxx

在cmd中尝试时,这不起作用。 CMD几乎肯定会向你发送错误消息,但你永远不会从sr读取所以你永远不会知道它。 我会添加一些空格,并在内部包含引号中的所有路径,如下所示:

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");