这两者之间的主要区别是什么?我想从我的(C ++)应用程序中仅运行另一个EXE。在继承环境,安全功能等方面是否存在任何差异?
这两者之间的主要区别是什么?我想从我的(C ++)应用程序中仅运行另一个EXE。在继承环境,安全功能等方面是否存在任何差异?
主要区别在于灵活性。 ShellExecute
更易于使用,但灵活性不高。 CreateProcess
使用起来很麻烦,但可以让你做任何事情。
举个例子,使用 CreateProcess
,你可以指定处理程序(管道或文件)用于子进程中的标准输入/输出/错误流。 ShellExecute
没有提供这样的功能。
也值得注意的是,尽管 ShellExecute
可以 直接启动可执行文件,但其主要意图是“执行”文档文件-例如,告诉它“执行”“whatever.html”,它会启动您的默认网络浏览器,将指定的 HTML 文件加载到其中。您也可以使用 CreateProcess
来实现此操作,但通常需要先调用 FindExecutable
查找与所需数据文件关联的程序,然后将您的数据文件作为参数传递给该程序来实现。
CreateProcess
和ShellExecute
之间的主要区别在于: CreateProcess
更加注重底层,而ShellExec
更加注重用户界面。例如使用CreateProcess
可以使用超过MAX_PATH
字符限制的命令行长度,即32768个字符。您还可以使用CreateProcess
在另一个Windows桌面上启动程序(如果您具有足够的权限),比如在登录屏幕上。另一个例子是,您可以使用ShellExecute
启动控制面板或打开计算机中存在的任何程序进行JPG文件的编辑,因此您使用ShellExecute
接近于Windows资源管理器中的相应操作。lpCommandLine
的长度,以减少不必要的讨论。如果您需要使用长路径创建进程,则建议您使用RtlCreateUserProcess
和RtlCreateProcessParameters
。您可能还需要使用NtResumeThread
、NtWaitForSingleObject
、RtlDestroyProcessParameters
、RtlInitUnicodeString
(并且RtlDosPathNameToNtPathName_U
也会很有帮助)。 - OlegCreateProcess
函数会在PROCESS_INFORMATION
结构中返回启动的进程及其主线程的句柄和ID。