Win32 API 类似于 CreateProcess,但适用于 bat/cmd/等。 (即使用 PATHEXT)
Posted
技术标签:
【中文标题】Win32 API 类似于 CreateProcess,但适用于 bat/cmd/等。 (即使用 PATHEXT)【英文标题】:Win32 API like CreateProcess, but works on bat/cmd/etc. (i.e. uses PATHEXT) 【发布时间】:2012-08-06 03:00:55 【问题描述】:如果您使用CreateProcess
,它仅适用于.exe,apparently。使用其他可执行文件类型的最佳方法是什么?
到目前为止,我们最好的办法是在这种情况下添加 cmd /c
。这真的是正确的方法吗?
【问题讨论】:
你说的是SHellExecute
吗?
@Amazed 我认为这行不通;我需要能力,例如从进程中发送输入并捕获输出,我通过CreateProcess
结构通过PPROCESS_INFORMATION
获得。
CreateProcess()
本质上只适用于可执行文件(通常包括批处理文件)。其他任何东西都是“文档”,并且有一个自定义处理程序,您可以使用ShellExecute()
调用它。
ShellExecuteEx
无法重定向 stdio 句柄,CreateProcess
通过 STARTUPINFO
的 hStdInput
、hStdOutput
和 hStdError
句柄进行重定向。
【参考方案1】:
批处理文件在技术上不是可执行文件,它们只是注册为使用cmd
打开。正如您提到的,您需要能够操作 I/O 句柄,您最好的选择确实是使用 CreateProcess
和 cmd /c
。
【讨论】:
以上是关于Win32 API 类似于 CreateProcess,但适用于 bat/cmd/等。 (即使用 PATHEXT)的主要内容,如果未能解决你的问题,请参考以下文章
从 CreateProcessWithTokenW 获取 C# 中的 Process 对象
适用于 Windows 运行时应用的 Win32 和 COM API(系统)
适用于所有 Win32 程序员的在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例