两者的主要区别是什么?我愿意从我的 (C++) 应用程序中只运行另一个 EXE。在继承环境、安全特性等方面有什么不同吗?
3 回答
CreateProcess
和之间的主要区别ShellExecute
如下:CreateProcess
更多地面向低级别和ShellExec
高用户杠杆,在资源管理器中看到用户。
例如使用CreateProcess
一个可以使用长度更多的命令行MAX_PATH
。它有 32,768 个字符的限制。您还可以使用CreateProcess
在另一个 Windows 桌面(如登录屏幕)上启动程序(如果您有足够的权限)。
另一个例子。例如,您可以使用ShellExecute
启动控制面板或打开计算机上存在的任何程序来编辑 JPG 文件。因此,您可以ShellExecute
在 Windows 资源管理器中使用接近相应的操作。
主要区别在于灵活性。ShellExecute
更容易使用,但没有很大的灵活性。CreateProcess
使用起来很痛苦,但可以让你做任何事情。
例如,使用CreateProcess
,您可以指定句柄(管道或文件)以用于子项中的标准输入/输出/错误流。ShellExecute
不给你想要的方式来做到这一点。
可能还值得注意的是,虽然ShellExecute
可以用来直接启动可执行文件,但它的主要目的是“执行”文档文件——例如,告诉它“执行”一个“whatever.html”,它会启动你的默认值Web 浏览器并将指定的 HTML 文件加载到其中。您也可以使用它来执行此操作CreateProcess
,但要执行此操作,您(通常)首先调用FindExecutable
以查找与相关数据文件关联的程序,然后执行将您的数据文件作为参数传递的程序。
CreateProcess
返回已启动进程的句柄和 id,它是PROCESS_INFORMATION
结构中的主线程