integrate the reboot dialog into the wizard
authorThomas Bluemel <thomas@reactsoft.com>
Thu, 27 Oct 2005 22:33:17 +0000 (22:33 +0000)
committerThomas Bluemel <thomas@reactsoft.com>
Thu, 27 Oct 2005 22:33:17 +0000 (22:33 +0000)
svn path=/trunk/; revision=18813

reactos/lib/syssetup/install.c
reactos/lib/syssetup/resource.h
reactos/lib/syssetup/syssetup_Cz.rc
reactos/lib/syssetup/syssetup_De.rc
reactos/lib/syssetup/syssetup_En.rc
reactos/lib/syssetup/syssetup_Fr.rc
reactos/lib/syssetup/syssetup_Ja.rc
reactos/lib/syssetup/syssetup_Nl.rc
reactos/lib/syssetup/wizard.c

index 68dd96c..d7b1ad1 100644 (file)
@@ -50,8 +50,6 @@
 #include "globals.h"
 #include "resource.h"
 
-#define VMWINST
-
 
 /* GLOBALS ******************************************************************/
 
@@ -80,30 +78,6 @@ DebugPrint(char* fmt,...)
 }
 
 
-#ifdef VMWINST
-static BOOL
-RunVMWInstall(VOID)
-{
-  PROCESS_INFORMATION ProcInfo;
-  STARTUPINFO si;
-  WCHAR InstallName[] = L"vmwinst.exe";
-
-  ZeroMemory(&si, sizeof(STARTUPINFO));
-  si.cb = sizeof(STARTUPINFO);
-
-  if(CreateProcess(NULL, InstallName, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS,
-                   NULL, NULL, &si, &ProcInfo))
-  {
-    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
-    CloseHandle(ProcInfo.hThread);
-    CloseHandle(ProcInfo.hProcess);
-    return TRUE;
-  }
-  return FALSE;
-}
-#endif
-
-
 HRESULT CreateShellLink(LPCTSTR linkPath, LPCTSTR cmd, LPCTSTR arg, LPCTSTR dir, LPCTSTR iconPath, int icon_nr, LPCTSTR comment)
 {
   IShellLink* psl;
@@ -561,15 +535,6 @@ InstallReactOS (HINSTANCE hInstance)
 
   SetupCloseInfFile(hSysSetupInf);
 
-#ifdef VMWINST
-  RunVMWInstall();
-#endif
-
-  DialogBox(hDllInstance,
-           MAKEINTRESOURCE(IDD_RESTART),
-           NULL,
-           RestartDlgProc);
-
   return 0;
 }
 
index 886be06..1b23310 100644 (file)
 
 #define IDD_FINISHPAGE                 1070
 #define IDC_FINISHTITLE                        1071
-
-
-#define IDD_RESTART                            2000
-#define IDC_RESTART_PROGRESS   2001
+#define IDC_RESTART_PROGRESS   1072
 
 #define IDD_GPL                 2100
 #define IDC_GPL_TEXT            2101
index 57567a5..4c6cfae 100644 (file)
@@ -144,24 +144,12 @@ BEGIN
     LTEXT "Completing the ReactOS Setup Wizard",IDC_FINISHTITLE,115,9,195,37
     LTEXT "You have successfully completed ReactOS Setup.\n\n" \
           "When you click Finish, your computer will restart.", IDC_STATIC, 115, 58, 195, 100
+    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12
     LTEXT "If there is a CD in a drive, remove it. Then, to restart "\
           "your computer, click Finish.", IDC_STATIC, 115, 160, 195, 31
 END
 
 
-IDD_RESTART DIALOG 6, 18, 245, 116
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "Instatalace ReactOSu"
-FONT 8, "MS Shell Dlg"
-BEGIN
-    LTEXT "Instalace ReactOSu byla úspì\9anì dokonèena.", -1, 13, 12, 212, 16
-    LTEXT "Pro pokraèování potøebuje instalaèní program restartovat Vá\9a poèítaè. Poèítaè bude automaticky restartován za 15 sekund nebo zmáèknete-li tlaèítko Restartovat.", -1, 13, 33, 212, 32
-/*    GROUPBOX "", -1, 7, 3, 231, 106 */
-    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 70, 212, 8 
-    PUSHBUTTON "&Restartovat", IDOK, 98, 87, 50, 14
-END
-
-
 IDD_GPL DIALOG 0, 0, 333, 230
 STYLE DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "GNU General Public License"
index 436b07a..d42c23c 100644 (file)
@@ -146,26 +146,12 @@ BEGIN
     LTEXT "Fertigstellung des ReactOS Setup Assistenten",IDC_FINISHTITLE,115,9,195,37
     LTEXT "Das ReactOS Setup wurde erfolgreich fertiggestellt.\n\n" \
           "Wenn Sie auf Fertig klicken, wird der Computer neu gestartet.", IDC_STATIC, 115, 58, 195, 100
+    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12
     LTEXT "Entfernen Sie die CD, wenn vorhanden. Danach klicken Sie "\
           "auf Fertig, um den Computer neu zu starten.", IDC_STATIC, 115, 160, 195, 31
 END
 
 
-IDD_RESTART DIALOG 6, 18, 245, 116
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "ReactOS Installation"
-FONT 8, "MS Shell Dlg"
-BEGIN
-    LTEXT "Die Installation von ReactOS wurde erfolgreich fertiggestellt.", IDC_STATIC, 13, 12, 212, 16
-    LTEXT "Um fortzufahren muss Ihr Computer neu gestartet werden. "\
-          "Der Computer wird in 15 Minuten automatisch neu gestartet oder wenn Sie auf "\
-          "Neustart klicken.", IDC_STATIC, 13, 33, 212, 32
-/*    GROUPBOX "", -1, 7, 3, 231, 106 */
-    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 70, 212, 8 
-    PUSHBUTTON "&Neustart", IDOK, 98, 87, 50, 14
-END
-
-
 IDD_GPL DIALOG 0, 0, 333, 230
 STYLE DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "GNU General Public License"
index 4f4d636..e0068e8 100644 (file)
@@ -147,26 +147,12 @@ BEGIN
     LTEXT "Completing the ReactOS Setup Wizard", IDC_FINISHTITLE, 115, 8, 195, 24
     LTEXT "You have successfully completed ReactOS Setup.\n\n" \
           "When you click Finish, your computer will restart.", IDC_STATIC, 115, 40, 195, 100
+    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12
     LTEXT "If there is a CD in a drive, remove it. Then, to restart "\
           "your computer, click Finish.", IDC_STATIC, 115, 169, 195, 17
 END
 
 
-IDD_RESTART DIALOG 6, 18, 245, 116
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "ReactOS Installation"
-FONT 8, "MS Shell Dlg"
-BEGIN
-    LTEXT "Installation of ReactOS was successfully completed.", IDC_STATIC, 13, 12, 212, 16
-    LTEXT "In order to continue, the installation program needs to restart your computer. "\
-          "The computer will be automatically restarted in 15 seconds or if you press the "\
-          "Restart button.", IDC_STATIC, 13, 33, 212, 32
-/*    GROUPBOX "", -1, 7, 3, 231, 106 */
-    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 70, 212, 8 
-    PUSHBUTTON "&Restart", IDOK, 98, 87, 50, 14
-END
-
-
 IDD_GPL DIALOG 0, 0, 333, 230
 STYLE DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "GNU General Public License"
index 141d96f..d941d45 100644 (file)
@@ -147,26 +147,12 @@ BEGIN
     LTEXT "L'assistant d'installation de ReactOS est terminé.",IDC_FINISHTITLE,115,9,195,37
     LTEXT "Vous avez installé avec succès ReactOS.\n\n" \
           "En cliquant sur Terminer, votre ordinateur va redémarrer.", IDC_STATIC, 115, 58, 195, 100
+    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12
     LTEXT "S'il y a un CD dans un lecteur, enlevez-le. Puis, pour redémarrer "\
           "votre ordinateur, cliquez sur Terminer.", IDC_STATIC, 115, 160, 195, 31
 END
 
 
-IDD_RESTART DIALOG 6, 18, 245, 116
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "Installation de ReactOS"
-FONT 8, "MS Shell Dlg"
-BEGIN
-   LTEXT "L'assistant d'installation de ReactOS est terminé.", IDC_STATIC, 13, 12, 212, 16
-   LTEXT "Pour continuer, l'assistant a besoin de redémarrer votre ordinateur. "\
-         "L'ordinateur redémarrera automatiquement dans 15 secondes, ou quand vous appuyerez "\
-         "sur le bouton Redémarrer.", IDC_STATIC, 13, 33, 212, 32
-/*   GROUPBOX "", -1, 7, 3, 231, 106 */
-   CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 70, 212, 8 
-   PUSHBUTTON "&Redémarrer", IDOK, 98, 87, 50, 14
-END
-
-
 IDD_GPL DIALOG 0, 0, 333, 230
 STYLE DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "GNU General Public License"
index 4eba1e0..27810f1 100644 (file)
@@ -147,26 +147,12 @@ BEGIN
     LTEXT "ReactOS \83Z\83b\83g\83A\83b\83\83E\83B\83U\81[\83h\82ª\8a®\97¹\82µ\82Ü\82µ\82½", IDC_FINISHTITLE, 115, 8, 195, 24
     LTEXT "ReactOS \83Z\83b\83g\83A\83b\83v\82ª\90³\8fí\82É\8a®\97¹\82µ\82Ü\82µ\82½\81B\n\n" \
           "[\8a®\97¹] \82ð\83N\83\8a\83b\83N\82·\82é\82Æ\81A\83R\83\93\83s\83\85\81[\83^\82ð\8dÄ\8bN\93®\82µ\82Ü\82·\81B", IDC_STATIC, 115, 40, 195, 100
+    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12
     LTEXT "\83h\83\89\83C\83u\82É CD \82ª\93ü\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\81ACD \82ð\8eæ\82è\8fo\82µ\82Ä\82­\82¾\82³\82¢\81BCD \82ð\8eæ\82è\8fo\82µ"\
           "\82½\82ç\81A[\8a®\97¹] \82ð\83N\83\8a\83b\83N\82µ\82Ä\83R\83\93\83s\83\85\81[\83^\82ð\8dÄ\8bN\93®\82µ\82Ä\82­\82¾\82³\82¢\81B", IDC_STATIC, 115, 169, 195, 17
 END
 
 
-IDD_RESTART DIALOG 6, 18, 245, 116
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "ReactOS \82Ì\83C\83\93\83X\83g\81[\83\8b"
-FONT 9, "MS UI Gothic"
-BEGIN
-    LTEXT "ReactOS \82Í\90³\8fí\82É\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ü\82µ\82½\81B", IDC_STATIC, 13, 12, 212, 16
-    LTEXT "\83C\83\93\83X\83g\81[\83\8b \83v\83\8d\83O\83\89\83\80\82ð\91±\82¯\82é\82É\82Í\81A\83R\83\93\83s\83\85\81[\83^\82ð\8dÄ\8bN\93®\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B"\
-          "\83R\83\93\83s\83\85\81[\83^\82Í 15 \95b\8cã\82É\8e©\93®\93I\82É\8dÄ\8bN\93®\82µ\82Ü\82·\81B\8d¡\82·\82®\8dÄ\8bN\93®\82·\82é\82É\82Í"\
-          "[\8dÄ\8bN\93®] \83{\83^\83\93\82ð\83N\83\8a\83b\83N\82µ\82Ä\82­\82¾\82³\82¢\81B", IDC_STATIC, 13, 33, 212, 32
-/*    GROUPBOX "", -1, 7, 3, 231, 106 */
-    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 70, 212, 8 
-    PUSHBUTTON "\8dÄ\8bN\93®(&R)", IDOK, 98, 87, 50, 14
-END
-
-
 IDD_GPL DIALOG 0, 0, 333, 230
 STYLE DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "GNU General Public License"
index 5678d8b..f00701f 100644 (file)
@@ -147,26 +147,12 @@ BEGIN
     LTEXT "Completing the ReactOS Setup Wizard", IDC_FINISHTITLE, 115, 8, 195, 24
     LTEXT "You have successfully completed ReactOS Setup.\n\n" \
           "When you click Finish, your computer will restart.", IDC_STATIC, 115, 40, 195, 100
+    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12
     LTEXT "If there is a CD in a drive, remove it. Then, to restart "\
           "your computer, click Finish.", IDC_STATIC, 115, 169, 195, 17
 END
 
 
-IDD_RESTART DIALOG 6, 18, 245, 116
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "ReactOS Installation"
-FONT 8, "MS Shell Dlg"
-BEGIN
-    LTEXT "Installation of ReactOS was successfully completed.", IDC_STATIC, 13, 12, 212, 16
-    LTEXT "In order to continue, the installation program needs to restart your computer. "\
-          "The computer will be automatically restarted in 15 seconds or if you press the "\
-          "Restart button.", IDC_STATIC, 13, 33, 212, 32
-/*    GROUPBOX "", -1, 7, 3, 231, 106 */
-    CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 70, 212, 8 
-    PUSHBUTTON "&Restart", IDOK, 98, 87, 50, 14
-END
-
-
 IDD_GPL DIALOG 0, 0, 333, 230
 STYLE DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "GNU General Public License"
index d524091..3d246c3 100644 (file)
@@ -38,6 +38,7 @@
 #include "globals.h"
 #include "resource.h"
 
+#define VMWINST
 
 /* GLOBALS ******************************************************************/
 
@@ -46,6 +47,47 @@ static SETUPDATA SetupData;
 
 /* FUNCTIONS ****************************************************************/
 
+#ifdef VMWINST
+static BOOL
+RunVMWInstall(HWND hWnd)
+{
+  PROCESS_INFORMATION ProcInfo;
+  MSG msg;
+  DWORD ret;
+  STARTUPINFO si = {0};
+  WCHAR InstallName[] = L"vmwinst.exe";
+
+  si.cb = sizeof(STARTUPINFO);
+
+  if(CreateProcess(NULL, InstallName, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS,
+                   NULL, NULL, &si, &ProcInfo))
+  {
+    EnableWindow(hWnd, FALSE);
+    for (;;)
+    {
+      while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+      {
+        if (msg.message == WM_QUIT)
+          goto done;
+        TranslateMessage(&msg);
+        DispatchMessage(&msg);
+      }
+
+      ret = MsgWaitForMultipleObjects(1, &ProcInfo.hProcess, FALSE, INFINITE, QS_ALLEVENTS | QS_ALLINPUT);
+      if (ret == WAIT_OBJECT_0)
+        break;
+    }
+done:
+    EnableWindow(hWnd, TRUE);
+
+    CloseHandle(ProcInfo.hThread);
+    CloseHandle(ProcInfo.hProcess);
+    return TRUE;
+  }
+  return FALSE;
+}
+#endif
+
 static VOID
 CenterWindow(HWND hWnd)
 {
@@ -96,7 +138,7 @@ CreateTitleFont(VOID)
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 GplDlgProc(HWND hwndDlg,
            UINT uMsg,
            WPARAM wParam,
@@ -165,7 +207,7 @@ GplDlgProc(HWND hwndDlg,
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 WelcomeDlgProc(HWND hwndDlg,
                UINT uMsg,
                WPARAM wParam,
@@ -231,7 +273,7 @@ WelcomeDlgProc(HWND hwndDlg,
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 AckPageDlgProc(HWND hwndDlg,
                  UINT uMsg,
                  WPARAM wParam,
@@ -323,7 +365,7 @@ AckPageDlgProc(HWND hwndDlg,
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 OwnerPageDlgProc(HWND hwndDlg,
                  UINT uMsg,
                  WPARAM wParam,
@@ -413,7 +455,7 @@ OwnerPageDlgProc(HWND hwndDlg,
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 ComputerPageDlgProc(HWND hwndDlg,
                     UINT uMsg,
                     WPARAM wParam,
@@ -576,8 +618,8 @@ SetKeyboardLayoutName(HWND hwnd)
 static VOID
 RunInputLocalePage(HWND hwnd)
 {
-  PROPSHEETPAGE psp;
-  PROPSHEETHEADER psh;
+  PROPSHEETPAGE psp = {0};
+  PROPSHEETHEADER psh = {0};
   HMODULE hDll;
 //  TCHAR Caption[256];
 
@@ -585,7 +627,6 @@ RunInputLocalePage(HWND hwnd)
   if (hDll == NULL)
     return;
 
-  ZeroMemory(&psp, sizeof(PROPSHEETPAGE));
   psp.dwSize = sizeof(PROPSHEETPAGE);
   psp.dwFlags = PSP_DEFAULT;
   psp.hInstance = hDll;
@@ -594,7 +635,6 @@ RunInputLocalePage(HWND hwnd)
 
 //  LoadString(hDll, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
 
-  ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
   psh.dwSize = sizeof(PROPSHEETHEADER);
   psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_PROPTITLE;
 //  psh.hwndParent = hwnd;
@@ -611,7 +651,7 @@ RunInputLocalePage(HWND hwnd)
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 LocalePageDlgProc(HWND hwndDlg,
                   UINT uMsg,
                   WPARAM wParam,
@@ -1178,7 +1218,7 @@ SetSystemLocalTime(HWND hwnd, PSETUPDATA SetupData)
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 DateTimePageDlgProc(HWND hwndDlg,
                     UINT uMsg,
                     WPARAM wParam,
@@ -1252,7 +1292,7 @@ DateTimePageDlgProc(HWND hwndDlg,
 }
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 ProcessPageDlgProc(HWND hwndDlg,
                    UINT uMsg,
                    WPARAM wParam,
@@ -1280,12 +1320,24 @@ ProcessPageDlgProc(HWND hwndDlg,
 
            hWndProgress = GetDlgItem(hwndDlg, IDC_PROCESSPROGRESS);
            Position = SendMessage(hWndProgress, PBM_GETPOS, 0, 0);
-           if (Position == 300)
+           if (Position == 2)
            {
+             KillTimer(hwndDlg, 1);
+
+             /* Enable the Back and Next buttons */
+             PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT);
              PropSheet_PressButton(GetParent(hwndDlg), PSBTN_NEXT);
            }
            else
            {
+#ifdef VMWINST
+             if (Position == 1)
+             {
+                KillTimer(hwndDlg, 1);
+                RunVMWInstall(GetParent(hwndDlg));
+                SetTimer(hwndDlg, 1, 50, NULL);
+             }
+#endif
              SendMessage(hWndProgress, PBM_SETPOS, Position + 1, 0);
            }
          }
@@ -1302,14 +1354,11 @@ ProcessPageDlgProc(HWND hwndDlg,
                 PropSheet_SetWizButtons(GetParent(hwndDlg), 0);
 
                 SendDlgItemMessage(hwndDlg, IDC_PROCESSPROGRESS, PBM_SETRANGE, 0,
-                                   MAKELPARAM(0, 300));
+                                   MAKELPARAM(0, 2));
                 SetTimer(hwndDlg, 1, 50, NULL);
                 break;
 
               case PSN_WIZNEXT:
-
-                /* Enable the Back and Next buttons */
-                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
                 break;
 
               default:
@@ -1327,7 +1376,7 @@ ProcessPageDlgProc(HWND hwndDlg,
 
 
 
-INT_PTR CALLBACK
+static INT_PTR CALLBACK
 FinishDlgProc(HWND hwndDlg,
               UINT uMsg,
               WPARAM wParam,
@@ -1352,6 +1401,25 @@ FinishDlgProc(HWND hwndDlg,
         }
         break;
 
+      case WM_TIMER:
+         {
+           INT Position;
+           HWND hWndProgress;
+
+           hWndProgress = GetDlgItem(hwndDlg, IDC_RESTART_PROGRESS);
+           Position = SendMessage(hWndProgress, PBM_GETPOS, 0, 0);
+           if (Position == 300)
+           {
+             KillTimer(hwndDlg, 1);
+             PropSheet_PressButton(GetParent(hwndDlg), PSBTN_FINISH);
+           }
+           else
+           {
+             SendMessage(hWndProgress, PBM_SETPOS, Position + 1, 0);
+           }
+         }
+         return TRUE;
+
       case WM_NOTIFY:
         {
           LPNMHDR lpnm = (LPNMHDR)lParam;
@@ -1361,11 +1429,21 @@ FinishDlgProc(HWND hwndDlg,
               case PSN_SETACTIVE:
                 /* Enable the correct buttons on for the active page */
                 PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_FINISH);
+                
+                SendDlgItemMessage(hwndDlg, IDC_RESTART_PROGRESS, PBM_SETRANGE, 0,
+                                   MAKELPARAM(0, 300));
+                SendDlgItemMessage(hwndDlg, IDC_RESTART_PROGRESS, PBM_SETPOS, 0, 0);
+                SetTimer(hwndDlg, 1, 50, NULL);
                 break;
 
               case PSN_WIZBACK:
                 /* Handle a Back button click, if necessary */
-                break;
+                KillTimer(hwndDlg, 1);
+
+                /* Skip the progress page */
+                PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_DATETIMEPAGE);
+                SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
+                return TRUE;
 
               case PSN_WIZFINISH:
                 /* Handle a Finish button click, if necessary */
@@ -1390,20 +1468,20 @@ InstallWizard(VOID)
 {
   PROPSHEETHEADER psh;
   HPROPSHEETPAGE ahpsp[8];
-  PROPSHEETPAGE psp;
+  PROPSHEETPAGE psp = {0};
+  UINT nPages = 0;
 
   /* Clear setup data */
   ZeroMemory(&SetupData, sizeof(SETUPDATA));
 
   /* Create the Welcome page */
-  ZeroMemory (&psp, sizeof(PROPSHEETPAGE));
   psp.dwSize = sizeof(PROPSHEETPAGE);
   psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
   psp.hInstance = hDllInstance;
   psp.lParam = (LPARAM)&SetupData;
   psp.pfnDlgProc = WelcomeDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_WELCOMEPAGE);
-  ahpsp[0] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
   /* Create the Acknowledgements page */
   psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
@@ -1411,7 +1489,7 @@ InstallWizard(VOID)
   psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_ACKSUBTITLE);
   psp.pszTemplate = MAKEINTRESOURCE(IDD_ACKPAGE);
   psp.pfnDlgProc = AckPageDlgProc;
-  ahpsp[1] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
   /* Create the Owner page */
   psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
@@ -1419,7 +1497,7 @@ InstallWizard(VOID)
   psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_OWNERSUBTITLE);
   psp.pszTemplate = MAKEINTRESOURCE(IDD_OWNERPAGE);
   psp.pfnDlgProc = OwnerPageDlgProc;
-  ahpsp[2] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
   /* Create the Computer page */
   psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
@@ -1427,7 +1505,7 @@ InstallWizard(VOID)
   psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_COMPUTERSUBTITLE);
   psp.pfnDlgProc = ComputerPageDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_COMPUTERPAGE);
-  ahpsp[3] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
 
   /* Create the Locale page */
@@ -1436,7 +1514,7 @@ InstallWizard(VOID)
   psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_LOCALESUBTITLE);
   psp.pfnDlgProc = LocalePageDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_LOCALEPAGE);
-  ahpsp[4] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
 
   /* Create the DateTime page */
@@ -1445,32 +1523,30 @@ InstallWizard(VOID)
   psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_DATETIMESUBTITLE);
   psp.pfnDlgProc = DateTimePageDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_DATETIMEPAGE);
-  ahpsp[5] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
 
   /* Create the Process page */
-#if 0
   psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
   psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_PROCESSTITLE);
   psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_PROCESSSUBTITLE);
   psp.pfnDlgProc = ProcessPageDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_PROCESSPAGE);
-  ahpsp[6] = CreatePropertySheetPage(&psp);
-#endif
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
 
   /* Create the Finish page */
   psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
   psp.pfnDlgProc = FinishDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_FINISHPAGE);
-  ahpsp[6] = CreatePropertySheetPage(&psp);
+  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
 
   /* Create the property sheet */
   psh.dwSize = sizeof(PROPSHEETHEADER);
   psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
   psh.hInstance = hDllInstance;
   psh.hwndParent = NULL;
-  psh.nPages = 7;
+  psh.nPages = nPages;
   psh.nStartPage = 0;
   psh.phpage = ahpsp;
   psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);