在c++程序中重啟自己的一種方法

字號:

在工程.cpp文件(Project1.cpp)中加入: #include "Unit1.h"
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    try
    {
    Application->Initialize();
    Application->CreateForm(__classid(TfrmMain), &frmMain);
    Application->Run();
    }
    catch (Exception &exception)
    {
    Application->ShowException(&exception);
    }
    catch (...)
    {
    try
    {
    throw Exception("");
    }
    catch (Exception &exception)
    {
    Application->ShowException(&exception);
    }
    }
    if(g_bIsRunAgain)
    {
    AnsiString strPath;
    STARTUPINFO StartInfo;
    PROCESS_INFORMATION procStruct;
    memset(&StartInfo, 0, sizeof(STARTUPINFO));
    StartInfo.cb = sizeof(STARTUPINFO);
    strPath = Application->ExeName;
    if(!::CreateProcess(
    (LPCTSTR) strPath.c_str(),
    NULL,
    NULL,
    NULL,
    FALSE,
    NORMAL_PRIORITY_CLASS,
    NULL,
    NULL,
    &StartInfo,
    &procStruct))
    return 0;
    }
    return 0;
    }
    主窗口的單元頭文件(Unit1.h)中加入:
    extern bool g_bIsRunAgain;
    主窗口的單元.cpp(Unit1.cpp)中加入:
    bool g_bIsRunAgain = false;
    file://----------------------------------------------------------------------------
    // 關閉程序
    void __fastcall TfrmMain::btnCloseClick(TObject *Sender)
    {
    Close();
    }
    file://----------------------------------------------------------------------------
    // 重啟應用程序
    void __fastcall TfrmMain::btnReExcuteClick(TObject *Sender)
    {
    g_bIsRunAgain = true;
    Close();
    }