CreateProcess使用
来源:互联网 发布:农村 剩女 心态 知乎 编辑:程序博客网 时间:2024/06/01 12:00
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCTSTR lpCurrentDirectory,
_In_ LPSTARTUPINFO lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);
主要说明前两个参数的使用方法:
(1)lpApplicationName != NULL。此时lpApplicationName必须包含可执行文件的拓展名,如果文件名带目录则在相应的目录中查找,如果只有一个文件名,则在当前目录中查找。
例如:a.带目录
CreateProcess(_T("D:\\Child.exe"),
NULL,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
b.不带目录
CreateProcess(_T("Child.exe"),
NULL,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
(2)lpApplicationName = NULL。
在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开,当CreateProcess解析lpCommandLine 字符串时,它会检查字符串中的第一个标记(token),并假记此标记为我们想运行的可执行文件的名称,如果可执行文件的名称没有扩展名,默认为.exe,并且如果文件名不包含一个完整的路径,CreateProcess还会按以下顺序来搜索可执行文件:
(1)主调进程.exe文件所在的目录
(2)主调进程的当前目录
(3)windows系统目录,即GetSystemDirectory返回的System32子文件夹
(4)windows目录
(5)PATH环境变量中列出的目录
例如:
TCHAR szCmdLine[20] = {0};
_tcscpy_s(szCmdLine,_countof(szCmdLine), _T("Child.exe 123 345 "));
CreateProcess( NULL,
szCmdLine,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
*注意一个错误调用形式:
CreateProcess( NULL,
_T("Child.exe 123 345 "),
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
错误原因:lpCommandLine的类型为LPTSTR,它期望我们传入的是一个非“常量字符串”的地址。在内部,CreateProcess实际上会修改我们传给他的命令行字符串,当然在它返回前,它会把这个字符串还原。
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCTSTR lpCurrentDirectory,
_In_ LPSTARTUPINFO lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);
主要说明前两个参数的使用方法:
(1)lpApplicationName != NULL。此时lpApplicationName必须包含可执行文件的拓展名,如果文件名带目录则在相应的目录中查找,如果只有一个文件名,则在当前目录中查找。
例如:a.带目录
CreateProcess(_T("D:\\Child.exe"),
NULL,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
b.不带目录
CreateProcess(_T("Child.exe"),
NULL,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
(2)lpApplicationName = NULL。
在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开,当CreateProcess解析lpCommandLine 字符串时,它会检查字符串中的第一个标记(token),并假记此标记为我们想运行的可执行文件的名称,如果可执行文件的名称没有扩展名,默认为.exe,并且如果文件名不包含一个完整的路径,CreateProcess还会按以下顺序来搜索可执行文件:
(1)主调进程.exe文件所在的目录
(2)主调进程的当前目录
(3)windows系统目录,即GetSystemDirectory返回的System32子文件夹
(4)windows目录
(5)PATH环境变量中列出的目录
例如:
TCHAR szCmdLine[20] = {0};
_tcscpy_s(szCmdLine,_countof(szCmdLine), _T("Child.exe 123 345 "));
CreateProcess( NULL,
szCmdLine,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
*注意一个错误调用形式:
CreateProcess( NULL,
_T("Child.exe 123 345 "),
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
错误原因:lpCommandLine的类型为LPTSTR,它期望我们传入的是一个非“常量字符串”的地址。在内部,CreateProcess实际上会修改我们传给他的命令行字符串,当然在它返回前,它会把这个字符串还原。
阅读全文
0 0
- CreateProcess使用
- CreateProcess使用心得
- CreateProcess EnumWindows 使用
- CreateProcess的使用
- 关于CreateProcess的使用
- 关于CreateProcess的使用
- CreateProcess函数 详细使用
- CreateProcess函数使用
- 使用CreateProcess执行命令行
- CreateProcess使用注意事项
- CreateProcess使用心得
- CreateProcess函数使用
- 使用 CreateProcess 执行程序
- CreateProcess
- CreateProcess
- createprocess
- CreateProcess
- CreateProcess
- Apache mina 入门(四) —— 客户端长连接方式实现断线重连监听
- 画画一样开发软件 中文版开发工具的配置及开发准备
- 抽象类和接口的详解(实例)
- javabean转化为json格式的过滤 值为空或为null时的字段
- gulp 前端自动构建工具
- CreateProcess使用
- CNN在中文文本分类的应用
- Intellij IDEA 2017——安装+破解或注册+中文设置
- Python核心编程第二版第六章学习笔记
- Java实现敏感词过滤
- Python学习文件(File)方法
- 数据链路层帧传输的三个基本问题
- phpstorm 配置
- POJ 2976 Dropping tests 01分数规划 模板 二分&&Dinkelbach