RunCmd过程分解:
- 用Path.GetTempFileName()创建一个临时文件
- 用CreateFile打开它,其中第四个参数中SECURITY_ATTRIBUTES结构体中的bInheritHandle设置为true,表示句柄可继承
- 用DuplicateHandle复制一份句柄
- 设置STARTUPINFO。开启STARTF_USESTDHANDLES,将stdin设置为空文件句柄,将stdout和stderr分别设置为这两个句柄;开启STARTF_USESHOWWINDOW,将wShowWindow设置为SW_HIDE,隐藏窗口
- 用CreateProcess创建进程,第五个参数设置为true,表示继承句柄,最后一个参数返回PROCESS_INFORMATION结构体,包含有进程和主线程句柄
- 用CloseHandle关闭用不到的句柄
- 用WaitForSingleObject等待进程退出
- 用CloseHandle关闭进程句柄
- 用File.ReadAllText读取临时文件
- 用File.Delete删除临时文件
- 返回读取到的字符串