怎样让程序重新启动自己
来源:互联网 发布:七台河中天网络诈骗 编辑:程序博客网 时间:2024/04/20 12:52
转自:http://hi.baidu.com/meakhella/item/e8bfb0de28e5d9e43cc2cb44
void ReStart(BOOL bNormal)
{
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(bNormal && bSucc)
{
CWnd *pWnd = AfxGetMainWnd();
if(pWnd != NULL)
{
pWnd-> PostMessage(WM_CLOSE, 0, 0);
}
else
ExitProcess(-1);
}
else
ExitProcess(-1);
}
VC实现程序重新启动
在很多情况下,我们需要将当前运行的程序重新运行;此时我们就必须在程序关闭后立即重新运行程序,形成新的进程;
实例代码:
1、重启按钮事件中添加代码:
g_bIsRunAgain=true;//控制是否重新运行的变量
this->SendMessage(WM_CLOSE);
在MESSAGE_MAP中药添加 ON_WM_CLOSE
2、在OnClose()消息处理中加入代码:
if(g_bIsRunAgain)
{
char pBuf[MAX_PATH]; //存放路径的变量
GetCurrentDirectory(MAX_PATH,pBuf); //获取程序的当前目录
strcat(pBuf,"\");
strcat(pBuf,AfxGetApp()->m_pszExeName);
strcat(pBuf,".exe");
CString strPath= (CString) pBuf;
STARTUPINFO StartInfo;
PROCESS_INFORMATION procStruct;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
::CreateProcess(
(LPCTSTR) strPath,
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartInfo,
&procStruct);
}
CDialog::OnClose();
通过查阅资料实现了对话框程序重新启动的功能,流程如下:
1ShowWindow(SW_HIDE);//隐藏本对话框
2WinExec(strPath, SW_SHOW);//启动strPath路径下的执行文件
3 OnOK();//退出当前执行对话框程序
另外在获取strPath是使用函数:GetModuleFileName(NULL,buf,sizeof(buf))获取当前程序的执行文件路径。
附源代码:
1void CF_RockClientDlg::OnBtnRestart()
2{
3 // TODO: Add your control notification handler code here
4 char buf[256];
5 ::GetModuleFileName(NULL,buf,sizeof(buf));
6 CString strPath = buf;
7 ShowWindow(SW_HIDE);//隐藏本对话框
8 WinExec(strPath, SW_SHOW);//启动strPath路径下的执行文件
9 OnOK();//退出当前执行对话框程序
10}
vc 实现软件重启
一般要在一个事件里产生软件的自动重启 。
比如,我在一个对话框工程的子对话框中有一个单击按钮“确定”后弹出一个是否重开软件的功能。
子对话框中:
if(MessageBox("更改了设置,需重启软件生效","Notice",MB_YESNO)==IDYES)
{
// WM_ONSETRESTART 消息是一个自定义的消息
//实现一个布尔变量的开关,以此评估 响应 wm_close 消息是不是由这个按钮触发(否则软件永远重启)
AfxGetMainWnd()->SendMessage(WM_ONSETRESTART);
AfxGetMainWnd()->SendMessage(WM_CLOSE);
}
在主对话框中的 OnClose 中:
void CTransFileDlg::OnClose()
{
char pBuf[MAX_PATH];
//获取应用程序完全路径,比 GetCurrentDirectory 好用多了
GetModuleFileName(NULL,pBuf,MAX_PATH);
STARTUPINFO startupinfo;
PROCESS_INFORMATION proc_info;
memset(&startupinfo,0,sizeof(STARTUPINFO));
startupinfo.cb=sizeof(STARTUPINFO);
// 最重要的地方
if(m_bSetRestart)
::CreateProcess(pBuf,NULL,NULL,NULL,FALSE,
NORMAL_PRIORITY_CLASS,NULL,NULL,&startupinfo,&proc_info);
CDialog::OnClose();
}
- 怎样让程序重新启动自己
- 怎样让程序重新启动自己
- 怎样让MFC程序重新启动自己
- C#程序重新启动自己
- 怎样创建可以自启动的程序(程序可以重新启动自己)
- C#程序重新启动自己1
- 怎样让自己与众不同
- 怎样让程序延时
- 让运行着的ASP.NET Web程序重新启动
- C# 程序实现自重启(重新启动自己)。
- 怎样让自己的程序进程不让别人强行关闭掉
- 怎样让自己的程序进程不让别人强行关闭掉
- 怎样让Android 程序全屏
- 怎样让自己的blog酷起来?
- 怎样让搜索引擎收入自己的资源
- 怎样让自己对编程感兴趣?
- c#应用程序 自己重新启动自己
- 点击快捷方式,不重新启动程序而是让程序窗口重新显示的解决方案
- iOS4中Core Motion框架的介绍和使用
- 单利设计模式
- Dreamweaver:使用问题和技巧汇总
- Oracle 中序列(sequence)和触发器(trigger)的使用
- Android学习札记15:对Android中View绘制流程的一些理解
- 怎样让程序重新启动自己
- 编写PRO*C程序实现对oracle数据库常用操作并导出文本文件
- jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用
- lua基础小记
- ThinkPHP小小的经验总结
- win7下的Object Header结构
- yii框架下输出hive结果
- jQuery 屏蔽页面再次被按和延迟加载函数
- C#遍历指定文件夹中的所有文件