如题,我想在程序发生错误的时候,自动关闭,然后重新运行程序。vc++能实现吗?

解决方案 »

  1.   


    int nvalue= AfxMessageBox("是否真的要重启计算机?",4+32+256);
    if(nvalue==IDYES) //用户按下了"是"按钮
    {
    OSVERSIONINFO osv;
        osv.dwOSVersionInfoSize = sizeof OSVERSIONINFO;
        GetVersionEx(&osv);//获取操作系统的版本
        if(VER_PLATFORM_WIN32_NT == osv.dwPlatformId)
        {
            // 如果运行在NT/XP平台,必须先取得权限
            HANDLE hProcess, hToken;
            TOKEN_PRIVILEGES Privileges;
            LUID luid;
            hProcess=GetCurrentProcess();
            OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken);
            Privileges.PrivilegeCount = 1;
            LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid);
            Privileges.Privileges[0].Luid = luid;
            Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            AdjustTokenPrivileges(hToken, FALSE, &Privileges, NULL, NULL, NULL);
        }
    ExitWindowsEx(EWX_REBOOT,0);//重新启动计算机
    }
      

  2.   

    显然能:
    if (出错)
    {
    char szFileFullPath[MAX_PATH];
    ::GetModuleFileName(NULL, szFileFullPath, MAX_PATH);   //获取进程名
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    CreateProcess(NULL,szFileFullPath,NULL,NULL,FALSE, 0, NULL, NULL, &si, &pi ); //重启进程
    }
      

  3.   

    没有绝对安全的办法 用SHE侦测异常 发现异常就先把自己打开 但也不完全保证好使 守护进程更安全些 但会被认为是病毒吧 呵呵
      

  4.   

    XP下只能使用进程守护 在VISTA 以上才可以使用API使用重新启动软件!
      

  5.   

    我是这样使用的,能达到目的,就是不知道会不会有什么不安全?         ShowWindow(SW_HIDE); 
                    WinExec("PMSystem.exe",SW_HIDE); 
                    SendMessage(WM_CLOSE);//退出程序,重新启动
      

  6.   

    不要用守护进程了 SEH应该足够了