登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙漠里de烟雨

原创分享,禁止转载

 
 
 

日志

 
 

MFC-实现软件程序的重启  

2012-05-30 01:20:42|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如题:

方法一:通过守护进程

这里添加一个按钮,双击按钮转至程序,添加如下代码:

void CBackupDlg::OnBtnReset()
{
 // TODO: Add your control notification handler code here

 //得到当前程序的路径;
 char strPath[100];
 GetModuleFileName(NULL,strPath,100);

 //创建守护进程,在启用新进程成功后发送WM_QUIT消息结束原来的进程;
    STARTUPINFO startInfo;
    PROCESS_INFORMATION processInfo;
    ZeroMemory(&startInfo, sizeof(STARTUPINFO));
    startInfo.cb = sizeof(STARTUPINFO);
    if(CreateProcess(NULL,(LPTSTR)(LPCTSTR)strPath, NULL, NULL,FALSE, 0, NULL, NULL, &startInfo, &processInfo))
    {
        CloseHandle( processInfo.hProcess );
        CloseHandle( processInfo.hThread );
        PostQuitMessage(WM_CLOSE);
    }

}

当单击此按钮时,程序重启。如下图:

MFC-实现软件程序的重启 - 漠雨 - 沙漠里de烟雨

 

方法二:

如果方法一不奏效(一般应用程序如果在启用时要加载一些配置文件的话,或是需要一个完全新的启动环境时),可以使用通过在程序结束前

启动一批处理程序,然后发送WM_QUIT消息给应用程序来释放资源而结束程序(这里设置等待一段时间再启动程序的用意是让CPU有足够的时间去释放应用程序的所有资源),方法其实很简单:

在应用程序的同一目录下新建一批处理文件,如:StartApp.bat  ,里面的指令段如下:

@echo off
set /a num=5
:Cir
for /l %%i in (1,1,2000) do echo off
set /a num=%num%-1
if not %num%==0 goto Cir
cd /d %~dp0
start "" "Backup.exe"
exit

而应用程序的代码中就不用如方法一那样写一段很长的代码,只需要如下:

 char cmd[20] = ".\\StartApp.bat";
 system(cmd);
 PostQuitMessage(WM_CLOSE);


即可。

 

[附注]

三种方法使用延迟:

1)

@echo off
@ping -n 5 127.1 >nul 2>nul
rem 其中5是ping 5次,这大概有5秒的延迟.

2)

@echo off
set /a num=5
:Cir
for /l %%i in (1,1,2000) do echo Waiting... >nul
set /a num=%num%-1
if not %num%==0 goto Cir

3)
@echo off
echo wscript.sleep 5000 > delay.vbs
在相同目录下新建一delay.vbs脚本文件供批处理调用,内容如下:
cscript //nologo delay.vbs & del delay.vbs

 

cd /d %~dp0   的意思是转至当前批处理所批的目录下;

 

start "" "Backup.exe"   此意思是启动程序Backup.exe 后不会阻塞等待此应用程序结束而是直接退出批处理;
这里,如果写成call "Backup.exe" 或 start "Backup.exe" 则会等待Backup.exe程序结束后,批处理窗口才会关闭,期间如果程序一直没有结束,批处理启动的命令行窗口则会一直打开着。而如果start  ""   "应用程序.exe"  则是启动"应用程序.exe"后立马退出命令行窗口,不阻塞。

  评论这张
 
阅读(2292)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018