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"后立马退出命令行窗口,不阻塞。
MFC-实现软件程序的重启相关推荐
- 卸载idea2020不干净_强制卸载软件程序、以及清理注册表
我们经常遇到,软件卸载不了,或者卸载不干净的情况.要手动去强制卸载软件和清理它的注册表信息,比较麻烦.因此很多朋友都喜欢用三百六来强制卸载.但是360有时候也卸载不干净软件.而且三百六本来就不干净.除 ...
- 重启java_让Java程序自动重启的实现方法(推荐)
要让一个java程序自动重启还真不容易的,重启分两步,首先是结束程序,这个简单,只要运行System.exit()就可以了.然后是启动,这个就难了,这个时候程序都已经结束了,就像一个人死了就不可能再自 ...
- java程序自动重启_java程序自动重启
java写的cs程序,要求设置一个时间,让程序自动重启. 思路,java代码写一个定时器,每隔一秒判断是否重启,若符合条件,则创建一个新的线程,线程调用一个重启的批处理,重启批处理先停止5分钟,接着在 ...
- 删除服务残留注册表_强制卸载软件程序、清理注册表的好工具
我们经常遇到,软件卸载不了,或者卸载不干净的情况.要手动去强制卸载软件和清理它的注册表信息,比较麻烦.因此很多朋友都喜欢用三百六来强制卸载.但是360有时候也卸载不干净软件.而且三百六本来就不干净.除 ...
- java程序自动重启_让Java程序自动重启的实现方法(推荐)
要让一个java程序自动重启还真不容易的,重启分两步,首先是结束程序,这个简单,只要运行System.exit()就可以了.然后是启动,这个就难了,这个时候程序都已经结束了,就像一个人死了就不可能再自 ...
- 计算机怎么关闭开机自启应用,如何关闭电脑开机自动启动的软件程序
如何关闭电脑开机自动启动的软件程序 我们在电脑中安装软件的时候,不小心设置了开机启动,该怎么取消呢?今天就跟大家介绍一下如何关闭电脑开机自动启动的软件程序的具体操作步骤. 1. 首先打开电脑,找到桌面 ...
- 卸载idea2020不干净_强制卸载软件程序、清理注册表的好工具
我们经常遇到,软件卸载不了,或者卸载不干净的情况.要手动去强制卸载软件和清理它的注册表信息,比较麻烦.因此很多朋友都喜欢用三百六来强制卸载.但是360有时候也卸载不干净软件.而且三百六本来就不干净.除 ...
- MFC对话框应用程序中谷歌CEF浏览器内核的使用
MFC对话框应用程序中谷歌CEF浏览器内核的使用 最近在做一个与浏览器相关的MFC项目,用户要求使用IE和谷歌双内核.对于IE内核可以直接使用MFC中的ACTIVEX控件,但是对于谷歌浏览器内核却并没 ...
- 如何清理卸下应用的残余文件_Win10系统卸载软件程序及清除残留文件的方法有哪些?...
彼时荒年 回答数:147 | 被采纳数:134 2017-11-29 14:55:34 如果需要卸载安装在Windows10系统电脑中的软件程序,可用如下几种方法进行卸载:一是用软件自带的卸载程序 ...
最新文章
- 图解利用Auto Deploy 部署ESXi 5.x参考v1.0
- IP_FORWARD转发
- 你在用什么思想编码:事务脚本 OR 面向对象?
- rtmp服务器与播放器的交互
- ADO.net中常用的对象介绍
- Django框架(6.django后台管理/通过后台对数据表的增删改)
- 28个经过重新设计的著名博客案例
- Spring中@Autowired、@Qualifier、@Resource的区别
- 不同组织物料类别差异列表
- 国际认可不断增加,国产数据库发展与应用前景如何?
- html 获取mac地址,Javascript获取Mac地址
- Redash本地开发环境搭建
- JavaSwing订餐管理系统
- python can通信_Python中的高级/抽象Canbus接口
- 新站快速排名的seo优化流程
- 微软云存储更换品牌 免费空间将翻番达到15GB
- 学习笔记1:异地容灾和负载均衡
- Apache Passenger配置常用参数解读
- 【区块链】从一笔交易看区块链运作流程
- flying-saucer生成PDF