ShowMessage(aMsgQuitProcess, FALSE);
HRESULT ShowMessageAndQuitProcess(HWND aHwndFW, char *aMsgQuitProcess, char *aMsgWait, BOOL aCloseAllWindows, char *aProcessName, BOOL aForceQuit){  switch(sgProduct.mode)  {    case NORMAL:    {      char msgTitleStr[MAX_BUF];      GetPrivateProfileString("Messages", "MB_ATTENTION_STR", "", msgTitleStr, sizeof(msgTitleStr), szFileIniInstall);      MessageBox(hWndMain, aMsgQuitProcess, msgTitleStr, MB_ICONEXCLAMATION | MB_SETFOREGROUND);      break;    }    case AUTO:    {      /* Setup mode is AUTO.  Show message, timeout, then auto close       * all the windows associated with the process */      ShowMessage(aMsgQuitProcess, TRUE);      Delay(5);      ShowMessage(aMsgQuitProcess, FALSE);      break;    }    case SILENT:      break;  }  if(aForceQuit)  {    assert(aProcessName);    FindAndKillProcess(aProcessName, KP_KILL_PROCESS);  }  else  {    assert(aHwndFW);    /* First try sending a WM_QUIT message to the window because this is the     * preferred way to quit a process.  If it works, then we're good and     * CloseAllWindowsOfWindowHandle() will have nothing to do.     * If it doesn't work, then CloseAllWindowsOfWindowHandle will try to     * quit the process. */    SendMessageTimeout(aHwndFW, WM_QUIT, (WPARAM)1, (LPARAM)0, SMTO_NORMAL, WM_CLOSE_TIMEOUT_VALUE, NULL);    if(aCloseAllWindows)      CloseAllWindowsOfWindowHandle(aHwndFW, aMsgWait);  }  Delay(2);  return(WIZ_OK);}