对进程相关操作进行扩展,例如执行命令和查找进程等。

执行命令行

执行命令本质上是调用Process类启动新进程,各种扩展封装主要是为了方便常用场景。

执行文件Run

String.Run扩展将以隐藏窗口执行命令,并截取返回结果字符串。该方法较老,推荐使用后面的Execute。

方法原型:

Int32 Run(this String cmd, String? arguments = null, Int32 msWait = 0, Action<String>? output = null, Action<Process>? onExit = null, String? working = null)

各参数:

  • cmd,要执行的命令或文件名,如 "ping".Run("newlifex.com");
  • arguments,命令参数
  • msWait,等待退出的时间,0毫秒不等待,-1无限等待
  • output,输出
  • onExit,退出
  • working,工作目录

外壳执行ShellExecute

String.ShellExecute扩展将用操作系统外壳执行命令,各参数对标Process类。

在Shell上执行命令,目标进程并不是当前进程的子进程,不会随着当前进程退出而退出。

方法原型:

Process ShellExecute(this String fileName, String? arguments = null, String? workingDirectory = null)


执行并等待返回Execute

String.Execute扩展用于执行指定文件或命令,捕获其输出后返回。常用于执行各种系统命令并获取结果。

方法原型:

String? Execute(this String cmd, String? arguments, Int32 msWait, Boolean returnError, Encoding? outputEncoding)

参数说明:

    • cmd,要执行的文件或命令
    • arguments,命令参数
    • msWait,等待时间,毫秒数
    • returnError,在正常输出流无法获取结果内容时,是否捕获错误输出流作为结果
    • outputEncoding,输出流编码,默认使用Default编码,有时候需要使用UTF8

进程查找

    • GetProcessName,获取二级进程名。默认一级,如果是dotnet/java则取二级
    • GetCommandLine,获取指定进程的命令行参数
    • GetCommandLineArgs,获取指定进程的命令行参数

进程控制

    • SafetyKill,安全退出进程,目标进程还有机会执行退出代码
    • ForceKill,强制结束进程树,包含子进程
    • GetHasExited,获取进程是否终止,屏蔽异常