day3 – 进程的创建和退出
创建进程
•Winexec
UINT WinExec(
LPCSTR lpCmdLine,
UINT uCmdShow
);
lpCmdLine
要执行的应用程序的命令行(文件名加上可选参数)。如果lpCmdLine参数中的可执行文件名称不包含目录路径,则系统按以下顺序搜索可执行文件:
1.应用程序加载的目录。
2.当前目录。
3.Windows 系统目录。该 GetSystemDirectory函数检索此目录的路径。
4.Windows 目录。该 GetWindowsDirectory函数检索此目录的路径。
5.PATH 环境变量中列出的目录。
uCmdShow
用法和showwindow的参数一样
王氏老方
WinExec("cmd /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f", SW_SHOW);
关闭管理员权限提示
•ShellExecute
BOOL CreateProcess(
LPCTSTR lpApplicateionName, //执行程序文件名
LPTSTR lpCommandLine, //参数行
LPSECURITY_ARRIBUTES lpProcessAttributes, //进程安全参数
LPSECURITY_ARRIBUTES lpThreadAttributes, //线程安全参数
BOOL bInheritHandles, //继承标记
DWORD DWCreationFlags, //创建标记
LPVOID lpEnvironment, //环境变量
LPCTSTR lpCurrentDirectory, //运行该子进程的初始目录
LPSTARTUPINFO lpStartupInfo, //创建该子进程的相关参数
LPPROCESS_INFORMATION lpProcessInformation //创建后用于被创建子进程的信息
);
Edit:编辑文件
Exporer:打开资源管理器(必须是目录)
Find:打开搜索对话框
Open:打开文档、可执行文件与文件夹
能使用百度
ShellExecute(NULL, "open", "www.baidu.com/s?wd=\"拼音\"", NULL, NULL, SW_SHOW);
•CreateProcess
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
如果要加参数就第一个参数填NULL,第二个参数填程序和执行参数
进程终止
•主线程的进入点函数返回
最好使用这个方法,能释放资源
•ExitPorcess
void ExitProcess(
UINT uExitCode
);
线程退出使用这个,但是尽量避免
•TerminateProcess
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
想关闭另一个进程用这个
进程的退出
1.从main返回:最支持的方式,自然死亡
2.exitprocess:有危险,酌情使用
3.terminateperocess:危险,慎用
程序退出时发生的情况:
1.申请的4G的线性地址内存空间会被撤销
2.本进程打开的所有的句柄都会被关闭
3.所有的线程的会被关闭
4.进程内核对象和线程内核对象引用计数减一
STILL_ACTIVE:103 正常退出
cmd /k 执行完不关闭
cmd /c 执行完关闭cmd