日期:2014-05-16  浏览次数:20780 次

如何实现程序的自动重启
程序出错后 需要重新从main函数处开始运行 使用goto语句不在同一函数中 不可行 调用main函数占着以前的资源不放 
那怎么能让程序发现自己错误后 自己关闭后 让他 自己开始再运行起来 谢谢了

------解决方案--------------------
你可以建立一个父进程,它负责启动你的进程,并且在发现子进程失败后,重启子进程。
------解决方案--------------------
或者写一个脚本放在后台,定时监控进程。
------解决方案--------------------
二楼的说法靠谱,main函数里做的事情放到子进程里,main里就放一个管理子进程的父进程。
------解决方案--------------------
Win下是这样实现的。
思想为:

不需要另外创建一个程序,只需创建一个自己的“副本”进程即可。
1。接收参数改变,将新参数保存;
2。用CreateProcess创建一个自己的“克隆”进程——即新的“Instance”;
3。结束自己。
4。与此同时,“克隆”进程读取刚才保存的新参数,并且以新的参数开始运行。
void CChatClientDlg::RestartApp()
{
PROCESS_INFORMATION info;
STARTUPINFO startup;
char szPath[128];
char *szCmdLine;

GetModuleFileName(AfxGetApp()->m_hInstance, szPath, sizeof(szPath));
szCmdLine=GetCommandLine();
GetStartupInfo(&startup);

BOOL bSucc=CreateProcess(szPath, szCmdLine, NULL, NULL,
FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startup, &info);

if(bSucc)
{
CWnd *pWnd=AfxGetMainWnd();

if(pWnd!=NULL)
{
pWnd->PostMessage(WM_CLOSE, 0, 0);//会调用OnCancel
}
else
ExitProcess(-1);
}
else
ExitProcess(-1);
}