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 通过 STARTUPINFOhStdInputhStdOutputhStdError 句柄进行重定向。 【参考方案1】:

批处理文件在技术上不是可执行文件,它们只是注册为使用cmd 打开。正如您提到的,您需要能够操作 I/O 句柄,您最好的选择确实是使用 CreateProcesscmd /c

【讨论】:

以上是关于Win32 API 类似于 CreateProcess,但适用于 bat/cmd/等。 (即使用 PATHEXT)的主要内容,如果未能解决你的问题,请参考以下文章

从 CreateProcessWithTokenW 获取 C# 中的 Process 对象

适用于 Windows 运行时应用的 Win32 和 COM API(系统)

适用于所有 Win32 程序员的在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

如何在 Win32 窗口中实现 MFC 资源?

C#调用Win32 api时的内存操作

C# .NET Framework API(非 Win32 API)中的 CreateProcessAsUser()