很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启。所谓重启就是杀死系统的当前进程,然后重新开一个新进程。下面是一个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);
}     现在我想知道的是如何实现一个控制台程序的重启呢?
控制台程序的重启

解决方案 »

  1.   

       大侠,我明白了,先开辟一个新进程,然后再杀死当前进程。具体代码是:
    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;  
    }