/*
***** CreateProcess()应用实例 *****
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine, 要执行的命令行字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles, 新进程是否从调用进程处继承了句柄。FALSE为不继承,TRUE为继承
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo, 输入参数,指向一个 STARTUPINFO 结构,该结构里可以设定启动信息,可以设置为 NULL 。
LPPROCESS_INFORMATION lpProcessInformation 输出参数,指向一个 PROCESS_INFORMATION 结构,返回被创建进程的信息。
);
*/
#include <iostream>
#include<Windows.h>
#include<string.h>
using namespace std;
int main(int argc, char* argv[])
{
char cWindowsDirectory[MAX_PATH];
//Lptstr 与wchar_t* 等价(Unicode环境下);
LPTSTR cWinDir = new TCHAR[MAX_PATH];
// LPTSTR sWinDir = new TCHAR[300];
// GetCurrentDirectory(MAX_PATH, sWinDir); //获取操作系统当前路径
wcscpy(cWinDir, L"C:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe");
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));//结构体初始化;
ZeroMemory(&pi, sizeof(pi));
if(CreateProcess(NULL,cWinDir,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
cout << "创建进程成功。。。" << endl;
//下面两行关闭句柄,解除本进程和新进程的关系,不然有可能 不小心调用TerminateProcess函数关掉子进程
//closehandle(pi.hprocess);
//closehandle(pi.hthread);
}
else {
cerr << "创建子进程失败。。。" << endl;
printf("CreateProcess failed : %d\n", GetLastError());
}
Sleep(3000);
//终止子进程
TerminateProcess(pi.hProcess, NULL);
//终止本进程,状态码
ExitProcess(1001);
return 0;
}
WINAPI:: CreateProcess()
最新推荐文章于 2023-03-07 19:46:47 发布