遇到这样一个问题,大家有遇到的吗?不知道该怎么处理。基于MFC框架开发的一个小软件,有一台机器(处理器:Intel E7-4820 2GHz,内存:8G)的VMware虚拟机(Windows Server 2008 R2 64位)
出现如下现象:
1、利用psexec工具分别以session 0或者System用户启动,进程都在创建主窗口类的Create处失败。而后消息循环RunModalLoop()也是直接返回了;
2、以普通用户且非session 0启动进程就是正常的;
3、直接使用CreateWindow创建主窗口的一个普通的win32程序,以session 0和System用户创建也可以正常运行。
1、进一步分析后发现,是MFC默认生成的对话框里面有两个按钮,而刚好在CDialog::Create函数内部调用RegisterClassW进行button的类注册时失败,导致主对话框窗口失败,LastError拿到了8(ERROR_NOT_ENOUGH_MEMORY),而电脑里面从任务管理器看内存还有好几个G,VMmap查看系统中处于Free状态的内存也还有500多MB。
2、也排除了Atom Table不够的情况:系统中注册成功过的Atom都是0xC0打头。
3、把对话框中的两个按钮去掉后,进程就正常启动了