两者之间的主要区别是什么?我愿意从我的(C ++)应用程序中只运行另一个EXE。继承环境,安全功能等时是否有任何差异?
答案 0 :(得分:13)
CreateProcess
和ShellExecute
之间的主要区别如下: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
结构中的主线程