很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启。所谓重启就是杀死系统的当前进程,然后重新开一个新进程。下面是一个MFC对话框程序的重启按钮的响应函数:
// 重启按钮响应函数
void CTestRebootDlg::OnBnClickedReboot()
{
// TODO: 在此添加控件通知处理程序代码
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL);
//获取exe程序当前路径
extern CTestRebootApp theApp;
TCHAR szAppName[MAX_PATH];
:: GetModuleFileName(theApp.m_hInstance, szAppName, MAX_PATH);
CString strAppFullName;
strAppFullName.Format(_T("%s"),szAppName);
//重启程序
STARTUPINFO StartInfo;
PROCESS_INFORMATION procStruct;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
::CreateProcess(
(LPCTSTR)strAppFullName,
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartInfo,
&procStruct);
} 现在我想知道的是如何实现一个控制台程序的重启呢?
控制台程序的重启
// 重启按钮响应函数
void CTestRebootDlg::OnBnClickedReboot()
{
// TODO: 在此添加控件通知处理程序代码
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL);
//获取exe程序当前路径
extern CTestRebootApp theApp;
TCHAR szAppName[MAX_PATH];
:: GetModuleFileName(theApp.m_hInstance, szAppName, MAX_PATH);
CString strAppFullName;
strAppFullName.Format(_T("%s"),szAppName);
//重启程序
STARTUPINFO StartInfo;
PROCESS_INFORMATION procStruct;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
::CreateProcess(
(LPCTSTR)strAppFullName,
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartInfo,
&procStruct);
} 现在我想知道的是如何实现一个控制台程序的重启呢?
控制台程序的重启
解决方案 »
- lib路径问题
- 请教有关于用IDataObject接口函数取系统刚贴入剪切板类容(包括文件,字符等)问题
- 我的程序在XP下用VS2005编译的MFC程序,在WIN7下运行没反应,怎么办?[
- 我想将程序的数据加密压缩导出为文件(最好是zip兼容格式),有现成的库可用吗?
- 为什么ListBox不认识\n、\t、\r等转义字符
- 请问 mediaplayer 控制,怎么不显示控制条
- 内存问题,强烈求救
- 超简单问题
- 厦门软件龙头企业一夜失色 --- (近百名员工合法权益何处申讨)
- 我正在做公司的一个通信项目,临时由串口通信改为并口通信,十万火急!!!
- 请问HP-Socket 新增的 PULL 模型在实际应用中有什么好处?
- 小波变换的循环卷积的C语言实现问题
int main(int argc, char* argv[])
{
TCHAR szAppName[MAX_PATH];
:: GetModuleFileName(NULL, szAppName, MAX_PATH);
std::wstring strAppFullName = szAppName;
//重启程序
STARTUPINFO StartInfo;
PROCESS_INFORMATION procStruct;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
::CreateProcess(
strAppFullName.c_str(),
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartInfo,
&procStruct); HWND hWnd = ::FindWindow(NULL,szAppName);
ULONG nProcessID;
::GetWindowThreadProcessId( hWnd, &nProcessID );
HANDLE hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE,nProcessID );
::TerminateProcess( hProcessHandle, 4 ); getchar();
return 0;
}