MFC 记录 CreateProcess启动外部游戏主程序

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

函数原型

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

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

<span style="white-space:pre">    </span>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 被启动程序当前目录

时间: 2024-10-11 06:02:07

MFC 记录 CreateProcess启动外部游戏主程序的相关文章

VC/MFC如何添加启动界面

2015-05 转自 香远益清原文VC/MFC如何添加启动界面 1.基于框架类的应用程序添加启动画面的步骤(利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h 这两个文件) (1)用Photoshop等制作启动画面图像,保存为bmp格式.  (2)用Appwizard建一个基于单文档的工程Splash. (3)在资源中插入位图资源     打开VC++的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图.如果位图超

记录Linux启动流程的工具bootchart

/*********************************************************************  * Author  : Samson  * Date    : 04/28/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

141107●Winform拖动无边框窗口、播放音频、启动外部exe程序

鼠标拖动无边框窗口 1. //鼠标拖动 Point downpoint = new Point(); //事件,鼠标按下,获取当前坐标 private void panel1_MouseDown(object sender, MouseEventArgs e) { downpoint.X = -e.X; downpoint.Y = -e.Y; } //事件,鼠标移动,赋值新坐标 private void panel1_MouseMove(object sender, MouseEventArgs

MFC程序的启动过程,很清楚,但仍有待改进

原文出自:http://blog.csdn.net/yuvmen/article/details/5877271 了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助:对于不常用VC的人来说,过一段时间就会忘记.还是来记下来,方便以后查阅. 1.创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp对象,这个全局对象一产生,便执行其构造函数,因为并没有定义CMyWinApp构

eclipse 无法启动外部网页浏览器

1.如果你的eclipse运行页面时无法启动外部网页浏览器,如下图: 那么必须修改你的操作系统的默认浏览器. 2.这是因为有些时候窗口改变了浏览器的"记忆路径",所以你需要重新选择在Eclipse中的路径如下:  eclipse-> preference-> general-> web browser-> restore default-> aplly-> ok->然后重新启动eclipse 如下图:

记录-UEFI启动的预装WIN8的笔记本里引导linux双系统

新买了个联想笔记本,预装了WIN8,引导方式不再是几年前的MBR-BOIS引导了,是UEFI引导,所以,之前的grub4dos引导双系统方式都没用了. 现在把我装linux的过程记录,以备忘. 1. 下载mint-17(一个linux发行版,ubuntu14.04的衍生版,出了UI,一切一切跟ubuntu基本没啥差别)2. 把mint-17作成一个U盘启动盘: 方法:在Windows下使用Universal USB Installer创建一个Linux OS的USB启动盘.    注意:需要勾选

[20180614]删除bootstrap$记录无法启动2.txt

--//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstrap.html.--//按照介绍: 有人在数据库中注入了恶意脚本,导致数据库删除了bootstrap$中数据,关闭之后无法正常启动delete from bootstrap$; --//我更多的思考如果我遇到这个问题如何解决:1.如果有备份只要恢复到delete bootstrap$之前,但是这里有问题,因为删除后数据库还继续运行.不能继续应用日志,这样有恢复到 

[20180612]删除bootstrap$记录无法启动.txt

--//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstrap.html.--//按照介绍: 有人在数据库中注入了恶意脚本,导致数据库删除了bootstrap$中数据,关闭之后无法正常启动delete from bootstrap$; --//我更多的思考如果我遇到这个问题如何解决:1.如果有备份只要恢复到delete bootstrap$之前,但是这里有问题,因为删除后数据库还继续运行.不能继续应用日志,这样有恢复到 

【开发记录】微信小游戏开发入门——俄罗斯方块

叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好,但是已经可以让我入门小程序开发了XD. demo地址:https://github.com/nbclw/Laya_Brick 准备 在任何开发前都需要对要开发的东西有一定的了解.准备: 小游戏原理:微信小游戏是属于H5游戏的一种吧,我是这样理解的:在H5中,有一个叫Canvas(画布)的存在,与电脑