我正在使用MSVS 2008.我正在用c编写一个应用程序,想知道在Windows中重启应用程序的最佳方法是什么。
我环顾四周,有人正在做这样的事情,但我不确定这是否是最好的方式,或者甚至是否创造了一个全新的过程。
if(command == restart)
{
printf("program exiting!\n");
Sleep(2000);
system("cls");
WinExec("my_app.exe", SW_SHOW);
exit(0);
}
由于
答案 0 :(得分:1)
你必须有一个额外的过程。
从您的应用程序中,您将启动该过程。它将等待你的主应用程序退出,然后等待应该发生的任何事情(更新,...),然后重新启动它自杀。
从内部启动应用程序将无法正常运行,因为您将无法更新任何内容。
答案 1 :(得分:0)
简短回答:对我来说没问题,但是如果你绑定到套接字,那么你的两个程序在父出口()之前可能会发生碰撞的可能性很小。
我害怕要求“最好的”方式产生其中一个“依赖于上下文”的回复。
首先,根据WinExec上的MSDN docs,“此功能仅用于与16位Windows兼容。应用程序应使用CreateProcess函数”。这意味着它是一个dos-era函数包装器,用于“exec”类函数。当然,CreateProcess只是MS会创建的某种怪物,但如果这个应用程序非常重要,那么应该采取建议。
有趣的是,MS在CreatProcess的文档中提到“关闭进程的首选方法是使用ExitProcess函数。”
所以你可以看到,有这么多问题,有很多解决方案。回答的问题可能会在这里回复:
等
我希望能帮到你!
答案 2 :(得分:0)
以下是关于如何启动计算器的一些愚蠢的例子。
STARTUPINFO startUpInfo = {0};
PROCESS_INFORMATION procInfo = {0};
startUpInfo.cb = sizeof(startUpInfo);
while(1)
{
CreateProcess(L“C:\ windows \ System32 \ calc.exe”,NULL,NULL,NULL,FALSE,0,NULL,NULL,& startUpInfo,& procInfo);
WaitForSingleObject(procInfo.hProcess,INFINITE);
}
如您所见,这将启动一个新进程“calc.exe”。它将等待它终止,然后重新开始。请记住,我没有关闭任何手柄!!!