CSharp之通过CMD调用第三方应用

调用控制台应用程序

1
2
3
4
5
6
7
8
9
10
11
Process p = new Process();
p.StartInfo.FileName = "cmd.exe"; //调用的exe
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInp= true;
p.StartInfo.RedirectStandardOutp= true;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.StandardInput.WriteLine("cd "rootPath);
//等待执行结束
p.WaitForExit();

C#调用exe和双击exe文件的区别

程序运行时,有个 WorkingDirectory 的概念。
你的FORM调用别的EXE时,如果EXE和你的FORM程序,不在一个目录,那么,那个EXE默认是认为你的目录是它的所在目录,这样的情况下,如果那个EXE有配置文件需要读取的话,就读取不到了。所以,在你调用那个EXE时,指定好那个EXE,WorkingDirectory为该EXE所在目录,即可解决问题。

要重定向 IO 流,Process 对象必须将 UseShellExecute 属性设置为 False。

第三方调用cmd 与 常规打开cmd 的区别

这就是因为当年的DOS现在已经不跟大家说导致的一些信息缺失导致的问题了。
首先我们说一个CMD窗口也就是一个command .com(dos)启动后他是有一些默认配置信息的:
path就是其中之一,如果不配置path那么所有的外部命令(command内置一些内部命令,除此之外的exe、com、bat等都是外部命令)都必须输入全部路径才能正确访问。

然后我们说说windows不论你运行还是开始菜单点击cmd,都是默认加载系统配置中的path的,配置位置见下图:

但是当你使用第三方程序启动的cmd,就不会加载这些默认信息了。
所以就这么简单,你要么在加载cmd的时候赋予path,要么使用绝对路径调用外部命令。

第三方调用CMD时赋予环境变量

1
Environment.SetEnvironmentVariable("","");

有些常规打开一闪而过的程序,一般需要设置参数使用