MFC-实现软件程序的重启  

MFC-实现软件程序的重启  

如题:

方法一:通过守护进程

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

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);
    }

}

方法二:

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

启动一批处理程序,然后发送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"后立马退出命令行窗口,不阻塞。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值