现在的位置: 首页 > 综合 > 正文

Windows开发-CreateProcess

2019年06月16日 ⁄ 综合 ⁄ 共 1380字 ⁄ 字号 评论关闭

别人都在看Coscos我还在看Windows,加油

BOOL CreateProcess
(
    LPCTSTR lpApplicationName,        
    LPTSTR lpCommandLine,        
    LPSECURITY_ATTRIBUTES lpProcessAttributes。
    LPSECURITY_ATTRIBUTES lpThreadAttributes,        
    BOOL bInheritHandles,        
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,        
    LPCTSTR lpCurrentDirectory,        
    LPSTARTUPINFO lpStartupInfo,        
    LPPROCESS_INFORMATION lpProcessInformation 
);

CreateProcess函数会在当前线程中创建一个进程内核对象,然后将可执行文件和相关代码、数据加载到对应的地址,然后系统为这个进程创建一个主线程内核对象。lpApplicationName为可执行文件的文件名,注意其为不可写的,所以不能传堆数据给它。 

但是我在vc6.0上面可以这个

  1. CreateProcess(NULL,TEXT("NOTEPAD"),NULL,NULL,  
  2.     FALSE,0,NULL,NULL,&si,&pi) ;  没有报错typedef /* [string] */ WCHAR __RPC_FAR *LPWSTR; 只是char *的应该的。

lpApplicationName为空的时候,会从lpCommandLine解析出可执行文件的文件名,lpCommandLine=“x.exe.
xxxxx” 的形式, TEXT("NOTEPAD 123") ;则会执行123.txt 并且弹出NOTEPAD

可执行文件的名称可以不带后缀,程序搜索可执行文件的顺序为

(1)主调进程.exe文件所在的目录 

(2)主调进程的当前目录   //exe的上一级目录里面

(3)windows系统目录,即GetSystemDirectory返回的System32子文件夹

(4)windows目录

(5)PATH环境变量中列出的目录

lpApplicationName不为空的时候,lpApplicationName不能忽略后缀名,且其只会在当前目录查找可执行文件。

由于会启动新的主进程和主线程,所有需要lpProcessAttributes和lpThreadAttributes来指定对应的安全描述符。

bInheritHandles表示此子进程是否拥有父进程的句柄表等。

dwCreationFlags表示新进程的一些创建方式,子进程的优先级等。

lpEnvironment  指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境。


lpStartupInfo: 大多数应用程序都希望生成的应用程序只是使用默认值,最起码要全部初始化为0,再把cb成员设为此结构体的大小,如果没有清0,则新进程可能创建失败.主要是描述子进程窗口的显示的问题。


lpProcessInformation
这个一看就明白,无非是保存进程和线程的ID,但是注意,用完之后要释放。

抱歉!评论已关闭.