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

C# 在C中执行命令提示符命令#,c#,command-line,command-prompt,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#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#服务的外部项目时,它不会工作。我不知道是否应该在代码中添加一些内容


help Meeeee请将这些命令写入批处理文件并执行批处理文件

在批处理文件中:

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


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

在批处理文件中:

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

而不是:

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();
如果需要查看程序的输出,只需使用输出字符串即可。

而不是:

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件事:我认为您存在间距问题,并且没有读取这些命令的结果。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");

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

看看你连接字符串的方式。例如,这个
@“cd”+@“程序文件\mysoftwarefolder”
将为您提供这个
“cdprogram files\mysoftwarefolder”
,而我认为您需要这个
“cd程序文件\mysoftwarefolder”
。注意空格。看看你连接字符串的方式。例如,这个
@“cd”+@“程序文件\mysoftwarefolder”
将为您提供这个
“cdprogram files\mysoftwarefolder”
,而我认为您需要这个
“cd程序文件\mysoftwarefolder”
。注意空格。@Oded-他可能还想将文件名作为选项传递给批处理文件。@Oded-他可能还想将文件名作为选项传递给批处理文件。