1 ,关闭前ShellExecute,CreateProcess,WinExec 
2 , 关闭前建立远线程启动自身 
3 ,写执行计划 at命令 
4 ,做成可自动运行的服务。
没有试过,你试后,告诉我结果!

解决方案 »

  1.   

    CTime tmpTime = CTime::GetCurrentTime();
    if( (savetime.nhour ==tmpTime.GetHour()) && (savetime.nmin == savetime.nmin))
    {
    KillTimer(1); if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    {
    MessageBox((LPCTSTR)"OpenProcessToken failed!");
    } LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识
    tkp.PrivilegeCount = 1;  
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限 if (GetLastError() != ERROR_SUCCESS) 
    {
    MessageBox((LPCTSTR)"AdjustTokenPrivileges enable failed!");
    } fResult =InitiateSystemShutdown( 
    NULL,                                  // 要关的计算机用户名
    (LPWSTR)"由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!",  // 显示的消息
    10,                                    // 关机所需的时间
    TRUE,                                 // ask user to close apps 
    FALSE);                               //设为TRUE为重起,设为FALSE为关机
    if(!fResult) 

    MessageBox((LPCTSTR)"InitiateSystemShutdown failed."); 
    }  tkp.Privileges[0].Attributes = 0; 
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);  if (GetLastError() != ERROR_SUCCESS) 
    {
    MessageBox((LPCTSTR)"AdjustTokenPrivileges disable failed."); 
    }  ExitWindowsEx(EWX_SHUTDOWN,0);
      

  2.   

    http://www.docin.com/p-1051980.html
    这儿有,但是,看起来比较痛苦!
      

  3.   

    笨方法,再开小个程序,由这个小程序重启大程序,大程序重启成功后再Kill小的俺也没试过....