服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# Process调用外部程序的实现

C# Process调用外部程序的实现

2022-10-31 11:37_程序兔 C#

这篇文章主要介绍了C# Process调用外部程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

使用C#调用外部程序,一种是通过Process类,一种是通过命令行,本文主要说一下使用C#中的Process类调用外部程序的方式。

过程:

1. 创建Process对象
2. 配置启动选项(输入、输出等)
3. 切换工作目录
4. 设置外部程序名
5. 设置传入参数
6. 启动外部程序
7. 等待外部程序结束
8. 关闭外部程序

过程

创建Process对象

?
1
2
3
4
Process process = new Process();
//通过new创建一个Process对象 process
//使用Process类需要在程序最开始处引用Process类所在命名空间,即下面这句
using System.Diagnostics;

配置启动选项

?
1
2
3
4
process.StartInfo.UseShellExecute = false; //必要参数
process.StartInfo.RedirectStandardOutput = true;//输出参数设定
process.StartInfo.RedirectStandardInput = true;//传入参数设定
process.StartInfo.CreateNoWindow = true;

切换工作目录

1、工作目录:程序运行时其启动文件以及配置文件等文件的所在目录。比如在桌面上选中QQ,右键单击“打开文件所在位置”,这个目录就是QQ运行起来后的工作目录。

我们当前编写的C#程序运行后也有自己的工作目录,因此如果要在C#中调用外部程序,最好在调用前将当前工作目录切换为外部程序的工作目录。

2、查看当前工作目录

以下两种代码都可以打印出当前程序的工作目录

System.IO.Directory.GetCurrentDirectory();

该函数以sting类型返回当前工作目录,可以使用控制台打印当前工作目录。

?
1
2
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
//打印一下工作目录

AppDomain.CurrentDomain.BaseDirectory;

AppDomain:应用程序域,以上语句可以获取当前应用程序域的基目录,也就是 应用程序名.exe所在目录,一般这个目录也是默认的工作目录。

AppDomain.CurrentDomain.BaseDirectory;是sting类型,因此也可以使用控制台打印出来。

?
1
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);

这两种方法打印工作目录的区别在于:

第一种方法打印的是工作目录,是动态的(工作目录可更改)

第二种方法打印的是当前AppDomain的基目录,只要AppDomain没被更改,打印出来的始终是 当前AppDomain的基目录,也就是应用程序名.exe所在目录

因此,可以在启动外部程序前更改工作目录为外部程序的工作目录,在外部程序执行结束后再使用AppDomain.CurrentDomain.BaseDirectory;将工作目录恢复为原始基目录以保证后续程序的正常执行。

3、切换当前工作目录为外部程序工作目录

?
1
2
System.IO.Directory.SetCurrentDirectory (外部程序工作目录);
//外部程序工作目录以字符串形式给出,且必须是绝对路径

比如当前C#所在程序的路径为 C:/Deskop/C#/bin/Debug/

?
1
2
AppDomain.CurrentDomain.BaseDirectory就等于C:/Deskop/C#/bin/Debug/
(当前工作目录也是这个路径)

所调用的外部程序目录在 C:/Deskop/C#/bin/Debug/NASM/
nasm.exe在C:/Deskop/C#/bin/Debug/NASM/nasm.exe

这里就可以写成

?
1
2
3
4
5
6
7
System.IO.Directory.SetCurrentDirectory ("C:\\Deskop\\C#\\bin\\Debug\\NASM\\");
//直接给出绝对路径
//路径分隔用 \ 转义 (即\\)
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM");
//或者使用基目录给出绝对路径
System.IO.Directory.SetCurrentDirectory(System.IO.Directory.GetCurrentDirectory() + "\\NASM");
//或者根据当前工作目录设置

4、恢复原始工作目录

在外部程序执行结束后需要将工作目录切换回来,借助AppDomain.CurrentDomain.BaseDirectory

?
1
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

设置外部程序名

切换工作目录后,一般外部程序名就在新的目录目录下。

?
1
2
process.StartInfo.FileName = "nasm.exe";
//等价于"C:\\Deskop\\C#\\bin\\Debug\\NASM\\nasm.exe"

设置传入参数

光有程序不行,还需要指定让这个程序执行什么操作,这个操作就通过传入参数传递。

比如在nasm下要将其工作目录下的MySourcesCode目录下的demo02.asm编译链接生成4.obj文件(生成在MySourcesCode目录下),就需要打开nasm,输入如下命令

?
1
nasm MySourcesCode/demo02.asm -o MySourcesCode/4.obj

nasm是程序名,后面的就是nasm的传入参数,也就是我们需要设置的东西。

?
1
process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj ";

程序启动、等待执行、关闭

?
1
2
3
process.Start();
process.WaitForExit();//等待程序执行完退出进程 
process.Close();

完整代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Process process = new Process();
process.StartInfo.UseShellExecute = false; //必要参数
process.StartInfo.RedirectStandardOutput = true;//输出参数设定
process.StartInfo.RedirectStandardInput = true;//传入参数设定
process.StartInfo.CreateNoWindow = true;
 
 
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM");
//设置NASM工作目录为当前工作目录
 
//Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目录
 
process.StartInfo.FileName = "nasm.exe";
//设置要打开的程序名
 
process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj ";
//设置传入参数
 
process.Start(); //程序启动
process.WaitForExit();//等待程序执行完退出进程 
process.Close(); //关闭程序
 
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
//NASM执行完后需要将工作目录切换为原工作目录
 
//Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目录

环境及运行截图

外部程序

C# Process调用外部程序的实现

外部程序所在目录

C# Process调用外部程序的实现

外部程序源文件_目标文件所在目录

C# Process调用外部程序的实现

C#调用外部程序后生成的目标文件

C# Process调用外部程序的实现

到此这篇关于C# Process调用外部程序的实现的文章就介绍到这了,更多相关C# Process调用外部程序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/GuoYuying/p/14355185.html

延伸 · 阅读

精彩推荐
  • C#C# 泛型参数转换

    C# 泛型参数转换

    本文介绍了C# 泛型参数转换的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧...

    诺贝尔12272021-12-23
  • C#C# 遍历文件夹子目录下所有图片及遍历文件夹下的文件

    C# 遍历文件夹子目录下所有图片及遍历文件夹下的文件

    在上个项目开发中遇到这样的需求,取指定目录下面的所有图片,以表格的型式展示并显示该图片的相对路径。下面小编给大家分享C# 遍历文件夹子目录下...

    C#教程网5762021-12-21
  • C#C#二维数组基本用法实例

    C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...

    hacker08254382021-11-01
  • C#同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输

    这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细...

    JackWang-CUMT8962022-01-19
  • C#详解C#切换窗口

    详解C#切换窗口

    最近项目不多忙,于是抽点时间巩固下C#切换窗口问题,感兴趣的朋友跟着小编一起学习吧...

    有鼻子的熊9862021-11-17
  • C#C#程序中使用LINQ to XML来查询XML格式数据的实例

    C#程序中使用LINQ to XML来查询XML格式数据的实例

    这篇文章主要介绍了C#程序中使用LINQ to XML来查询XML格式数据的实例,LINQ to XML是.NET框架中集成的接口,可以将XML数据放到内存中进行处理,需要的朋友可以参考...

    DebugLZQ6692021-11-15
  • C#C#设计模式之Facade外观模式解决天河城购物问题示例

    C#设计模式之Facade外观模式解决天河城购物问题示例

    这篇文章主要介绍了C#设计模式之Facade外观模式解决天河城购物问题,简单描述了外观模式的定义并结合具体实例分析了外观模式解决购物问题的相关步骤与...

    GhostRider6842022-01-21
  • C#WPF如何自定义ProgressBar滚动条样式

    WPF如何自定义ProgressBar滚动条样式

    这篇文章主要给大家介绍了关于WPF如何自定义ProgressBar滚动条样式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用WPF具有一定的参考...

    一叶知秋,知寒冬9692022-07-24