博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC 记录 CreateProcess启动外部游戏主程序
阅读量:4988 次
发布时间:2019-06-12

本文共 1841 字,大约阅读时间需要 6 分钟。

CreateProcess 为WindowsApi函数,用来创建一个新的进程,这个新进程可以运行指定的可执行文件!

函数原型

BOOL CreateProcess(LPCTSTR lpApplicationName,//参数1.应用程序的名称,绝对路径,也可以是相对路径,可为NULL,若为NULL,则执行lpCommandLineLPTSTR lpCommandLine,      //参数2.命令行参数,可为NULL,一般为应用程序传参,若为NULL,函数则使用 lpApplicationName字符串为运行命令行LPSECURITY_ATTRIBUTES lpProcessAttributes,//参数3.进程的属性,指向一个SECURITY_ATTRIBUTES结构,结构体决定返回的句柄是否被子进程继承,一般为NULLLPSECURITY_ATTRIBUTES lpThreadAttributes, //参数4.线程的属性,同参数3.但是这个参数决定的是 线程 是否被继承,一般为NULLBOOL bInheritHandles, // 参数5.是否继承父进程的属性,TRUE\FALSE ,一般为FALSE ,若为TRUE 进程中每个可被继承的打开句柄都被继承,被继承者有相同的值和访问权限DWORD dwCreationFlags, //参数6.标志位信息,参数太多,具体见MSDN,或者百度百科,一般默认为 0LPVOID lpEnvironment,  //参数7.环境变量,指向新进程的环境块,一般为NULL,为NULL则新进程使用调用进程的环境LPCTSTR lpCurrentDirectory, //参数8.程序当前目录,为指定子进程的工作路径,如果是启动Exe程序,则为应用程序坐在的目录LPSTARTUPINFO lpStartupInfo, //参数9.传给新进程的信息,指向新进程主窗口如何显示的STARUPINFO 结构体LPPROCESS_INFORMATIONlpProcessInformation //参数10.进程返回的信息,用来接收新进程识别信息的PROCESS_INFORMATION结构体);

以上为函数原型, 下面为例子调用

    STARTUPINFO si;    PROCESS_INFORMATION pi;    ZeroMemory(&si, sizeof(si));    si.cb = sizeof(si);    CString chPath,strTmp;    TCHAR CmdLine[260];    TCHAR FileName[260];    TCHAR Directory[260];        chPath ="C:\\Game\\update\\";    _stprintf(FileName, _T("%sgame.exe"), chPath);    _stprintf(Directory, _T(chPath));    _stprintf(CmdLine, _T("-debug"));    if (!CreateProcess(FileName, CmdLine, NULL, NULL, FALSE, 0, NULL, Directory, &si, &pi))    {        strTmp.Format("启动游戏失败,代码: %d", GetLastError());        AfxMessageBox(strTmp);        return;    }    //等待进程关闭    WaitForSingleObject(pi.hProcess, INFINITE);    //关闭进程和线程句柄    CloseHandle(pi.hProcess);    CloseHandle(pi.hThread);
刚开始测试的时候, 使用程序获得配置文件里游戏路径,总是错误, 一般出现错误码  为 2, 5, 267等, 
 
比较容易忽略的地方为:
lpApplicationName 执行的Exe程序的路径以及程序,
lpCommandLine 向启动程序传参,
lpCurrentDirectory 被启动程序当前目录

转载于:https://www.cnblogs.com/callback/p/4247950.html

你可能感兴趣的文章
error_logger 爆炸
查看>>
自动换行 word-break:break-all和word-wrap:break-word
查看>>
三列自适应等高且中列宽度自适
查看>>
wp8模拟器操作键盘
查看>>
dpkg命令的用法
查看>>
在thinkpad SL400上U盘安装双系统ubuntu14.10
查看>>
bootstrap-table 的使用
查看>>
编辑类
查看>>
用python绘制树和深林
查看>>
Hadoop学习笔记—9.Partitioner与自定义Partitioner
查看>>
这是见过最重口的江南style!屌丝自卑了!
查看>>
【转】可编程管线基本流程
查看>>
eclipse默认编码设置为utf-8
查看>>
python之装饰器
查看>>
NIO-3网络通信
查看>>
系统短信库的一些用法
查看>>
日志管理
查看>>
js常见正则表达式验证及方法(一)
查看>>
IOS开发 Missing submodule 'XXXX' 警告
查看>>
c语言海量数据处理
查看>>