7.2 通过API创建新进程
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:53
WindowsWinExec()ShellExecute()CreateProcessA()WinExec()ShellExecute()CreateProcessA()
WinExecWinExec()WinExec()
该函数的原型为:
UINT WinExec(
LPCSTR lpCmdLine,
UINT uCmdShow
);
其参数说明如下:
- lpCmdLine:需要执行的命令行字符串
- uCmdShow:指定程序窗口最初显示方式,如SW_SHOW,即窗口正常大小和位置显示
CreateProcess()ShellExecute()
#include <iostream>
#include <Windows.h>
BOOL WinExec(char *pszExePath, UINT uiCmdShow)
{
UINT uiRet = 0;
uiRet = WinExec(pszExePath, uiCmdShow);
if (31 < uiRet)
{
return TRUE;
}
return FALSE;
}
int main(int argc, char * argv[])
{
int ret = 0;
ret = WinExec("c:\\windows\\system32\\notepad.exe",TRUE);
printf("执行状态: %d \n", ret);
system("pause");
return 0;
}
ShellExecuteShellExecute()
该函函数原型如下:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
参数说明:
- hwnd:执行的窗口的句柄。可以为NULL,如果为NULL则表示没有窗口。
- lpOperation:操作类型,可以是open或print。如果为NULL,则此函数将尝试打开文件。
- lpFile:需要执行的目标文件、应用程序或者URL地址。
- lpParameters:命令行参数。
- lpDirectory:指定被启动程序的执行路径,如果为NULL,则使用当前程序路径。
- nShowCmd:指定被启动程序的窗口状态。
HINSTANCEERROR_FILE_NOT_FOUNDERROR_BAD_FORMAT
#include <iostream>
#include <Windows.h>
BOOL MyShellExecute(char *pszExePath, UINT uiCmdShow)
{
HINSTANCE hInstance = 0;
hInstance = ShellExecute(NULL, NULL, pszExePath, NULL, NULL, uiCmdShow);
if (32 < (DWORD)hInstance)
{
return TRUE;
}
return FALSE;
}
int main(int argc, char * argv[])
{
int ret = 0;
ret = MyShellExecute("c:\\windows\\system32\\notepad.exe", TRUE);
printf("执行状态: %d \n", ret);
system("pause");
return 0;
}
CreateProcess()APIWinExec()ShellExecute()CreateProcess()CreateProcess()
其函数原型如下:
BOOL CreateProcess(
LPCSTR lpApplicationName, // 可执行文件名或命令行调用
LPSTR lpCommandLine, // 字符串形式的命令行参数
LPSECURITY_ATTRIBUTES lpProcessAttributes,// 进程的安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性
BOOL bInheritHandles, // 建立进程时是否继承父句柄
DWORD dwCreationFlags, // 进程标记
LPVOID lpEnvironment, // 进程环境空间块的指针
LPCSTR lpCurrentDirectory, // 当前工作目录的指针
LPSTARTUPINFOA lpStartupInfo, // 指向 StartupInfo 结构的指针
LPPROCESS_INFORMATION lpProcessInformation // 指向 ProcessInformation 结构的指针
);
参数说明:
- lpApplicationName:需要执行的可执行文件名或命令行调用。如果为NULL,则将使用lpCommandLine参数中的文件名
- lpCommandLine:命令行参数,可以传递参数给可执行文件
- lpProcessAttributes:进程的安全属性。一般为NULL
- lpThreadAttributes:线程的安全属性。一般为NULL
- bInheritHandles:指定新进程是否继承父进程的句柄
- dwCreationFlags:指定进程的标记。常用的标记有NORMAL_PRIORITY_CLASS,表示新进程在普通优先级类中运行
- lpEnvironment:进程环境空间块的指针,用于设置新进程的环境变量
- lpCurrentDirectory:指定新进程的初始工作目录,如果为NULL,则使用与调用进程相同的当前目录
- lpStartupInfo:指向STARTUPINFO结构体的指针
- lpProcessInformation:进程信息结构,包括新进程的句柄和进程ID
如果仅仅只是需要将一个进程拉起来,那么只需要传递三个参数即可,其余参数可以全部使用0进行填充,如下所示;
#include <iostream>
#include <Windows.h>
BOOL ExecRun(LPCSTR exe_file)
{
PROCESS_INFORMATION pi = { 0 };
STARTUPINFO si = { 0 };
si.cb = sizeof(STARTUPINFO);
BOOL bRet = CreateProcessA(exe_file, 0, 0, 0, 0, 0, 0, 0, &si, &pi);
if (bRet != FALSE)
CloseHandle(pi.hProcess);
return TRUE;
return FALSE;
}
int main(int argc, char * argv[])
{
int ret = 0;
ret = ExecRun("c:\\windows\\system32\\notepad.exe");
printf("执行状态: %d \n", ret);
system("pause");
return 0;
}
- 上一篇: 7.3 Windows驱动开发:内核监视LoadImage映像回调
- 下一篇: 7 JavaScala中启动Spark作业(Launching Spark jobs from Java Scala)
相关文章
-
7.3 Windows驱动开发:内核监视LoadImage映像回调
7.3 Windows驱动开发:内核监视LoadImage映像回调
- 互联网
- 2026年04月04日
-
7款震撼人心的HTML5CSS3文字特效
7款震撼人心的HTML5CSS3文字特效
- 互联网
- 2026年04月04日
-
08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴
08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴
- 互联网
- 2026年04月04日
-
7 JavaScala中启动Spark作业(Launching Spark jobs from Java Scala)
7 JavaScala中启动Spark作业(Launching Spark jobs from Java Scala)
- 互联网
- 2026年04月04日
-
07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
- 互联网
- 2026年04月04日
-
6月29日学习总结 Django自带的用户认证
6月29日学习总结 Django自带的用户认证
- 互联网
- 2026年04月04日






