CreateProcess和ShellExecute差异

时间:2012-05-25 01:42:41

标签: c++ windows winapi createprocess shell-exec

两者之间的主要区别是什么?我愿意从我的(C ++)应用程序中只运行另一个EXE。继承环境,安全功能等时是否有任何差异?

3 个答案:

答案 0 :(得分:13)

CreateProcessShellExecute之间的主要区别如下:CreateProcess更倾向于低级别而ShellExec则位于高级用户控制台上,可以在资源管理器中查看用户

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

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

答案 1 :(得分:6)

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

例如,使用CreateProcess,您可以指定用于子项中标准输入/输出/错误流的句柄(管道或文件)。 ShellExecute并不会让您想要这样做。

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

答案 2 :(得分:3)

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