CreateProcess 和 ShellExecute 的区别

CreateProcess and ShellExecute differences

本文关键字:区别 ShellExecute CreateProcess      更新时间:2023-10-16

两者的主要区别是什么?我愿意只从我的 (C++) 应用程序运行另一个 EXE。继承环境、安全功能等有什么区别吗?

CreateProcessShellExecute 之间的主要区别如下:CreateProcess更面向低级别,ShellExec在资源管理器中看到用户的高用户杠杆。

例如,使用 CreateProcess 可以使用长度更MAX_PATH的命令行。它有 32,768 个字符的限制。您还可以使用CreateProcess在另一个Windows桌面(如登录屏幕上)上启动程序(如果您有足够的权限)。

另一个例子。您可以使用ShellExecute启动控制面板或打开计算机上存在的任何程序以编辑例如JPG文件。因此,您可以使用ShellExecute接近Windows资源管理器中的相应操作。

主要区别在于灵活性。 ShellExecute更易于使用,但没有很大的灵活性。 CreateProcess使用起来很痛苦,但可以让您做任何事情。

例如,使用 CreateProcess ,您可以指定用于子级中标准输入/输出/错误流的句柄(管道或文件)。 ShellExecute并没有给你想要的方法去做。

可能还值得注意的是,尽管ShellExecute可用于直接启动可执行文件,但其主要目的是"执行"文档文件 - 例如,告诉它"执行"任何.html",它会启动默认的Web浏览器并将指定的HTML文件加载到其中。您也可以使用 CreateProcess 来执行此操作,但要做到这一点,您(通常)首先调用 FindExecutable 来查找与相关数据文件关联的程序,然后执行将数据文件作为参数传递的程序。

CreateProcess返回已启动进程的句柄和 id,它是PROCESS_INFORMATION结构中的主线程