我用MFC写了一个single document的程序。
在一般情况下运行良好,并且可以放到启动项startup里面随即机启动。
但是在很少的情况下,随机启动后没有界面,但taskmgr里面进程却存在,并且相关线程还在运行,日志还在记录。这时只有结束进程再重启动程序
恳请各位不吝赐教!
在一般情况下运行良好,并且可以放到启动项startup里面随即机启动。
但是在很少的情况下,随机启动后没有界面,但taskmgr里面进程却存在,并且相关线程还在运行,日志还在记录。这时只有结束进程再重启动程序
恳请各位不吝赐教!
解决方案 »
- CreateMutex,WaitForSingleObject一定要在线程里面才阻塞?
- 带下拉列表的按钮
- 怎么回朔得到“Spin”控件背后最终的“对话框”的实例或句柄?
- 关于QQ文件传输的一些问题,大家讨讨论论研研究究!【没有分的哈】
- 如何在CEditView里面实现关键字的高亮显示阿
- 在vc.net中怎么编译单个cpp文件
- 我在VC中使用了MSComm控件,程序拿到没装VC机子上运行,程序启动不了,
- 在MFC编程中,没有实例化的类竟可以调成员函数,为什么???
- 有谁知道如何将VARIANT类型转换位字符型或CString型
- 那里有SDK2000下载 呢????
- WTL安装时的setup.js文件怎么用?
- 求助:VC打开时出错
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_pMainView = new CMainView;
((CView*)m_pMainView)->Create(NULL, NULL, WS_CHILD|WS_VISIBLE, CRect(0,0,2000,2000), this, 0, pContext);
SetActiveView(m_pMainView);
m_pMainView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pMainView->ShowWindow(SW_SHOW);
return TRUE;
}
在CMainView的OnCreate中有GetModuleFileName操作
int CMainView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; ... GetModuleFileName(...) ... return 0;
}
我使用了GetModuleFileName
这样用对开机自动启动有影响吗?
这个跟帐户有什么关系,All users里的Startup和Administrator里的Startup有什么不同?
望指教?
看是否走到m_pMainWnd->ShowWindow(SW_SHOW);
如果走到了,但是窗口没有显示,那么 try
{
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
}
catch (...)
{
loge_printf("some thing!");
}如果能捕捉到异常,问题有可能就复杂了
但是也有一些办法能帮助你,看编译时候产生的警告,是不是有不常见的,比如函数无法返回了
debug下看output窗口是否有异常警告信息
=============================================================================
总之这类问题一般都是由不好的编程习惯造成的,如打开文件没有判断返回值是否有效,使用一块内存去存储字符串等信息确没有对这块内存
进行初始化等,建议楼主看一下<<c++编程规范>>
当时的原因如下,请参考:现象:
仅在电脑第一次启动后出现,第二次运行程序时不会出现。
在安装了某些杀毒软件后出现,未安装的情况不出现。原因:
发生了死锁,启动过程中,我们使用了一个Splash画面,该画面在子线程中,Splash画面非正常退出,使用了ExitThread的方法,杀死自己。但主线程并未收到子线程已经over的消息。所以一直在等待。为什么会仅出现在第一次开机后,因为第一次开机后运行等待的时间过长,造成了调用ExitThread。
你看一下,是否也存在这种现象。
if (!ProcessShellCommand(cmdInfo))无返回,可以跟踪检测MainFrame::OnCreate/OnCreateClient分析原因
有可能是执行了耗时或无效操作。
你可以尝试使用GetModuleFileNameEx
我写了个检索USB生机的程序,每次U盘插上,弹出想让Window是做什么的那个界面,关闭后,被覆盖的部分总是刷不出来,也不知道怎么调试
开机时由于启动项过多导致Windows资源管理器忙,如果在这种情况下执行向托盘加载图标的任务,很可能会失败。所以就造成了,“进程存在,但在托盘中找不到图标”这种现象。
所以对于向托盘中加载图标的代码,要检查它的返回值,直到返回成功。我的界面代码是用VB写的,不过我想原理应该是相通的。