vc++如何实现程序重启? 如题,我想在程序发生错误的时候,自动关闭,然后重新运行程序。vc++能实现吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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);//重新启动计算机 } 显然能: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 ); //重启进程} 没有绝对安全的办法 用SHE侦测异常 发现异常就先把自己打开 但也不完全保证好使 守护进程更安全些 但会被认为是病毒吧 呵呵 XP下只能使用进程守护 在VISTA 以上才可以使用API使用重新启动软件! 我是这样使用的,能达到目的,就是不知道会不会有什么不安全? ShowWindow(SW_HIDE); WinExec("PMSystem.exe",SW_HIDE); SendMessage(WM_CLOSE);//退出程序,重新启动 不要用守护进程了 SEH应该足够了 如何获取有效字段 哪位知道在vc6.0下怎么使用 powertcp emulation? 请教当笔记本外接电源拔掉时,XP系统会发出什么消息? 为什么我在企业管理器内无法删除数据 vc++的前途 宏定义的问题 求助: 我用VC++IDE打开资源时候出现错误:Guideline must specify type.导致打开资源失败! 送分:CString如何向_bstr_t转换? 项目外包(视频网站辅助小工具) 那里有 ATL Internals 可以下载阿? 帮忙阿 工作 c++如何打某个开文件夹
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);//重新启动计算机
}
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 ); //重启进程
}
WinExec("PMSystem.exe",SW_HIDE);
SendMessage(WM_CLOSE);//退出程序,重新启动