当通过代码调用其他系统命令或者程序时,需要弹出一个新的终端窗口,并在这个窗口中执行命令,命令执行完成后,这个窗口则会自动关闭。
1. Windows
在Windows中,直接使用Process即可,dotnet对Windows的适配还是可以的,不需要什么额外的操作就可以达到目标效果,
1 | public static void InvokCommand(string cmd, string args) |
其中,FileName
是命令的路径,这里需要写绝对路径,这样可以不用关心所用的环境变量,而Arguments
是命令的参数,比如要查看phthon
的版本,
1 | var cmd = @"C:\Program Files/Python312/python.exe"; |
2. Mac
经过多角度尝试,发现单单使用Process的方式是无法弹出新的终端窗口的,命令确实会执行,但是不会弹出新终端窗口,所以需要通过其他方式辅助实现。
Mac系统自带一个osascript
命令,这个命令是用来执行Apple Script的,可以基于Mac系统本身实现多种效果,所以是可以实现弹出新终端窗口目的的,所以我们需要写一个Apple Script,实现开启新窗口执行命令,然后再通过Process
调用Apple Script即可
1 | tell application "Terminal" |
其中,command
即为我们需要执行的命令,同样建议使用绝对路径,可以不用管环境变量。在执行Process
前,完善Apple Script,然后调用即可,其扩展名为.scpt
,
1 | public static void InvokeCommand(stirng cmd, string args) |
3. 异步执行
如果在代码中不需要等待命令行执行结束,去掉Wait和Close,便可异步执行命令,
1 | var proc = new Process(); |