c#中调用cmd来运行命令

在c#中如何调用cmd来运行这个命令D:\TEST\test.exe参数1参数2参数3参数4D:\TEST\test.tif(需进行处理的文件)普通的命令都可以运行成功,... 在c#中如何调用cmd来运行这个命令D:\TEST\test.exe 参数1 参数2 参数3 参数4 D:\TEST\test.tif(需进行处理的文件)
普通的命令都可以运行成功,但是这个命令总是不行,请给出一个详细的代码,可以运行成功的给分
展开
 我来答
DREAMFIREFLY
2018-12-01
知道答主
回答量:13
采纳率:0%
帮助的人:1.2万
展开全部

原文地址:

原文

翻译:漫步到宇宙尽头

这篇文章将会告诉你如何像用微软的 命令提示符(cmd) 那样,在C#程序中执行命令。

介绍

使用Windows的命令提示符执行命令是一件很平常的事。当命令被执行后,命令提示符会将结果显示在屏幕上。我们常用的命令有很多,诸如:dir,find……

有时候,你可能也会想在C#程序中执行(外壳)命令。

不用担心!!!下面的代码可以实现你的想法…

示例代码

下面给出的代码创建了一个程序,即一个命令行程序来执行我们的目标命令。命令执行的结果被存储在一个 字符串变量 中,这个 字符串变量 中的信息可以给我们更多参考。我们可以使用 顺序执行(同步) 和 并列执行(异步)  两种方式来执行命令。在并列执行是,我们使用一个独立的线程来执行命令。你可以通过阅读程序中的注释来学习这个方法。

下面的这个代码使用 顺序执行 的方法来运行。


1.   /// <span class="code-SummaryComment"><summary></span>  
2.   /// Executes a shell command synchronously.  
3.   ///顺序执行 一个 外壳命令
4.   /// <span class="code-SummaryComment"></summary></span>  
5.   /// <span class="code-SummaryComment"><param name="command">string command</param></span>  
6.   /// <span class="code-SummaryComment"><returns>string, as output of the command.</returns></span>  
7.   public void ExecuteCommandSync(object command)  
8.   {  
9.        try  
10.       {  
11.           // create the ProcessStartInfo using "cmd" as the program to be run,  
12.           // and "/c " as the parameters.  
13.           // Incidentally, /c tells cmd that we want it to execute the command that follows,  
14.           // and then exit.  
15.           // 创建一个 ProcessStartInfo类型的变量,将 “命令”作为程序来运行。
16.           //将 “/c”作为一个参数。
17.          //顺便说下, /c 告诉 命令提示符:我们想要它执行 /c 后面的命令,然后退出。
18.      System.Diagnostics.ProcessStartInfo procStartInfo =  
19.          new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);  
20.    
21.      // The following commands are needed to redirect the standard output.  
22.      // This means that it will be redirected to the Process.StandardOutput StreamReader.  
23.      // 我们需要重定向 命令提示符 的标准输出。
24.      // 这意味着 命令提示符 将会 重定向到 Process.StandardOutput.StrezamReader 。
25.      procStartInfo.RedirectStandardOutput = true;  
26.      procStartInfo.UseShellExecute = false;  
27.      // Do not create the black window.  
28.      //不创建 黑色的窗口。
29.      procStartInfo.CreateNoWindow = true;  
30.      // Now we create a process, assign its ProcessStartInfo and start it  
31.      //现在我们创建一个 process,并将 ProcessStartInfo  赋值给它后,开始执行它。
32.      System.Diagnostics.Process proc = new System.Diagnostics.Process();  
33.      proc.StartInfo = procStartInfo;  
34.      proc.Start();  
35.      // Get the output into a string       //将输出存入一个字符串变量中。
36.      string result = proc.StandardOutput.ReadToEnd();  
37.      // Display the command output.
38.      //显示执行命令后的结果  
39.      Console.WriteLine(result);  
40.        }  
41.        catch (Exception objException)  
42.        {  
43.        // Log the exception  
44.        //记录异常
45.        }  
}

上面的代码调用 命令提示符 来处理等待执行的命令。因为我们想要将输出重定向到 StreamReader,所以procStartInfo.RedirectStandardOutput 的值被置为 true。procStartInfo.CreateNoWindow 变量被赋值true,这样就可以隐藏那个黑色的窗口。因此,程序将会静默执行命令。

下面的代码使用 并行 方式执行命令。

1.   /// <span class="code-SummaryComment"><summary></span>  
2.   /// Execute the command Asynchronously.  
3.   /// <span class="code-SummaryComment"></summary></span>  
4.   /// <span class="code-SummaryComment"><param name="command">string command.</param></span>  
5.   public void ExecuteCommandAsync(string command)  
6.   {  
7.      try  
8.      {  
9.       //Asynchronously start the Thread to process the Execute command request.  
10.      Thread objThread = new Thread(new ParameterizedThreadStart(ExecuteCommandSync));  
11.      //Make the thread as background thread.  
12.      objThread.IsBackground = true;  
13.      //Set the Priority of the thread.  
14.      objThread.Priority = ThreadPriority.AboveNormal;  
15.      //Start the thread.  
16.      objThread.Start(command);  
17.     }  
18.     catch (ThreadStartException objException)  
19.     {  
20.      // Log the exception  
21.     }  
22.     catch (ThreadAbortException objException)  
23.     {  
24.      // Log the exception  
25.     }  
26.     catch (Exception objException)  
27.     {  
28.      // Log the exception  
29.     }  
}

如果我们仔细观察,并行的程序实际上是开辟了一个线程来调用顺序执行的程序。线程在后台运行,使得命令本质上是并行执行的。

通过以上的示例代码,我们可以发现,“dir”命令有两种输出结果。第一个示例代码在命令执行完成后立即显示结果,而后一个示例代码,则是在输出“Done!”后才输出结果。原因是,第一个示例是顺序执行,也就是结果会立即出现。而第二个则是并行执行“dir”命令。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lcg1986
2010-03-03 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1625万
展开全部
其实简单的Process.Start就搞定了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式