如何重新启动用Windows编写的控制台c应用程序?

时间:2010-11-17 21:17:14

标签: c windows application-restart

我正在使用MSVS 2008.我正在用c编写一个应用程序,想知道在Windows中重启应用程序的最佳方法是什么。

我环顾四周,有人正在做这样的事情,但我不确定这是否是最好的方式,或者甚至是否创造了一个全新的过程。

    if(command == restart)
    {
        printf("program exiting!\n");
        Sleep(2000);
        system("cls");

        WinExec("my_app.exe", SW_SHOW);
        exit(0);
    }

由于

3 个答案:

答案 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”。它将等待它终止,然后重新开始。请记住,我没有关闭任何手柄!!!