Implement the 'You need to reboot' wizard page, and use it instead of the network message box.

Main advantage is that the message box doesn't appear anymore during second stage setup.

svn path=/trunk/; revision=23027
This commit is contained in:
Hervé Poussineau
2006-07-12 15:30:09 +00:00
parent fe866c5c43
commit b042f11818
10 changed files with 248 additions and 19 deletions
+22 -1
View File
@@ -188,6 +188,7 @@ NetClassInstaller(
HKEY hLinkageKey = NULL;
HKEY hNetworkKey = NULL;
HKEY hConnectionKey = NULL;
SP_DEVINSTALL_PARAMS_W installParams;
if (InstallFunction != DIF_INSTALLDEVICE)
return ERROR_DI_DO_DEFAULT;
@@ -437,7 +438,27 @@ NetClassInstaller(
* which are installed after its startup. So, we have to reboot to take
* this new netcard into account.
*/
MessageBox(NULL, TEXT("You need to reboot to finish the installation of your network card."), TEXT("Reboot required"), MB_OK | MB_ICONWARNING);
/* Should we reboot? */
installParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_W);
if (!SetupDiGetDeviceInstallParamsW(
DeviceInfoSet,
DeviceInfoData,
&installParams))
{
rc = GetLastError();
DPRINT("SetupDiGetDeviceInstallParams() failed with error 0x%lx\n", rc);
goto cleanup;
}
installParams.Flags |= DI_NEEDRESTART;
if (!SetupDiSetDeviceInstallParamsW(
DeviceInfoSet,
DeviceInfoData,
&installParams))
{
rc = GetLastError();
DPRINT("SetupDiSetDeviceInstallParams() failed with error 0x%lx\n", rc);
goto cleanup;
}
rc = ERROR_SUCCESS;
cleanup:
+14
View File
@@ -79,6 +79,20 @@ BEGIN
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,51,20,169,16
END
IDD_NEEDREBOOT DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Device installation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation complete",IDC_FINISHTITLE,120,8,195,11
LTEXT "You need to reboot to finish the install of:",
IDC_STATIC,120,32,195,19
LTEXT "Click Finish to close the wizard.",IDC_STATIC,120,174,
179,11
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,148,53,147,12
END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
+14
View File
@@ -79,6 +79,20 @@ BEGIN
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,51,20,169,16
END
IDD_NEEDREBOOT DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Device installation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation complete",IDC_FINISHTITLE,120,8,195,11
LTEXT "You need to reboot to finish the install of:",
IDC_STATIC,120,32,195,19
LTEXT "Click Finish to close the wizard.",IDC_STATIC,120,174,
179,11
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,148,53,147,12
END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
+14
View File
@@ -79,6 +79,20 @@ BEGIN
LTEXT "DISPOSITIVO DESCONOCIDO",IDC_DEVICE,51,20,169,16
END
IDD_NEEDREBOOT DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Device installation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation complete",IDC_FINISHTITLE,120,8,195,11
LTEXT "You need to reboot to finish the install of:",
IDC_STATIC,120,32,195,19
LTEXT "Click Finish to close the wizard.",IDC_STATIC,120,174,
179,11
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,148,53,147,12
END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
+16 -2
View File
@@ -7,7 +7,7 @@ CAPTION "Installation de mat
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Bienvenue",IDC_WELCOMETITLE,115,8,195,24
LTEXT "Cet assistant installe un nouveau pilote pour:",
LTEXT "Cet assistant installe un nouveau pilote pour :",
IDC_STATIC,115,21,195,16
LTEXT "Cliquer sur Suivant pour continuer.",IDC_STATIC,115,169,195,17
LTEXT "MATERIEL INCONNU",IDC_DEVICE,129,36,164,11
@@ -79,6 +79,20 @@ BEGIN
LTEXT "MATERIEL INCONNU",IDC_DEVICE,51,20,169,16
END
IDD_NEEDREBOOT DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Device installation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation terminée",IDC_FINISHTITLE,120,8,195,11
LTEXT "Vous devez redémarrer l'ordinateur avant d'utiliser :",
IDC_STATIC,120,32,195,19
LTEXT "Cliquer sur Terminer pour fermer l'assistant.",IDC_STATIC,120,174,
179,11
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,148,53,147,12
END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
@@ -86,7 +100,7 @@ CAPTION "Installation de mat
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation terminée",IDC_FINISHTITLE,115,8,195,11
LTEXT "L'assistant a fini d'installer le pilote pour:",
LTEXT "L'assistant a fini d'installer le pilote pour :",
IDC_STATIC,115,32,195,19
LTEXT "Cliquer sur Terminer pour fermer l'assistant.",IDC_STATIC,115,174,
179,11
+14
View File
@@ -80,6 +80,20 @@ BEGIN
LTEXT "Ismeretlen eszköz!",IDC_DEVICE,51,20,169,16
END
IDD_NEEDREBOOT DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Device installation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation complete",IDC_FINISHTITLE,120,8,195,11
LTEXT "You need to reboot to finish the install of:",
IDC_STATIC,120,32,195,19
LTEXT "Click Finish to close the wizard.",IDC_STATIC,120,174,
179,11
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,148,53,147,12
END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
+14
View File
@@ -79,6 +79,20 @@ BEGIN
LTEXT "Íåèçâåñòíîå óñòðîéñòâî",IDC_DEVICE,51,20,169,16
END
IDD_NEEDREBOOT DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Device installation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Installation complete",IDC_FINISHTITLE,120,8,195,11
LTEXT "You need to reboot to finish the install of:",
IDC_STATIC,120,32,195,19
LTEXT "Click Finish to close the wizard.",IDC_STATIC,120,174,
179,11
LTEXT "UNKNOWN DEVICE",IDC_DEVICE,148,53,147,12
END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 193
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
+14 -3
View File
@@ -457,9 +457,6 @@ PrepareFoldersToScan(
DWORD LengthNeeded = 0;
LPTSTR Buffer;
TRACE("Include removable devices: %s\n", IncludeRemovableDevices ? "yes" : "no");
TRACE("Include custom path : %s\n", IncludeCustomPath ? "yes" : "no");
/* Calculate length needed to store the search paths */
if (IncludeRemovableDevices)
{
@@ -748,6 +745,20 @@ DevInstallW(
{
/* Driver found ; install it */
retval = InstallCurrentDriver(DevInstData);
if (retval && Show != SW_HIDE)
{
/* Should we display the 'Need to reboot' page? */
SP_DEVINSTALL_PARAMS installParams;
installParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
if (SetupDiGetDeviceInstallParams(
DevInstData->hDevInfo,
&DevInstData->devInfoData,
&installParams))
{
if (installParams.Flags & (DI_NEEDRESTART | DI_NEEDREBOOT))
retval = DisplayWizard(DevInstData, hWndParent, IDD_NEEDREBOOT);
}
}
goto cleanup;
}
else if (Show == SW_HIDE)
+3 -1
View File
@@ -25,6 +25,8 @@
#define IDD_INSTALLDRV 3
#define IDD_NODRIVER 4
#define IDD_INSTALLFAILED 5
#define IDD_FINISHPAGE 6
#define IDD_NEEDREBOOT 6
#define IDD_FINISHPAGE 7
#define IDD_MAXIMUMPAGE IDD_FINISHPAGE
#endif /* RESOURCE_H */
+123 -12
View File
@@ -502,7 +502,7 @@ WelcomeDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static void
@@ -664,7 +664,7 @@ CHSourceDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static INT_PTR CALLBACK
@@ -759,7 +759,7 @@ SearchDrvDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static INT_PTR CALLBACK
@@ -810,9 +810,25 @@ InstallDrvDlgProc(
CloseHandle(hThread);
hThread = 0;
if (wParam == 0)
PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_FINISHPAGE);
else
PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_INSTALLFAILED);
{
/* Should we reboot? */
SP_DEVINSTALL_PARAMS installParams;
installParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
if (SetupDiGetDeviceInstallParams(
DevInstData->hDevInfo,
&DevInstData->devInfoData,
&installParams))
{
if (installParams.Flags & (DI_NEEDRESTART | DI_NEEDREBOOT))
{
PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_NEEDREBOOT);
}
else
PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_FINISHPAGE);
break;
}
}
PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_INSTALLFAILED);
break;
}
@@ -849,7 +865,7 @@ InstallDrvDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static INT_PTR CALLBACK
@@ -873,9 +889,13 @@ NoDriverDlgProc(
{
BOOL DisableableDevice = FALSE;
/* Get pointer to the global setup data */
DevInstData = (PDEVINSTDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)DevInstData);
/* Center the wizard window */
CenterWindow(GetParent(hwndDlg));
hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL);
ShowWindow(hwndControl, SW_HIDE);
EnableWindow(hwndControl, FALSE);
@@ -960,7 +980,7 @@ NoDriverDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static INT_PTR CALLBACK
@@ -986,6 +1006,9 @@ InstallFailedDlgProc(
DevInstData = (PDEVINSTDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)DevInstData);
/* Center the wizard window */
CenterWindow(GetParent(hwndDlg));
hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL);
ShowWindow(hwndControl, SW_HIDE);
EnableWindow(hwndControl, FALSE);
@@ -1036,7 +1059,86 @@ InstallFailedDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static INT_PTR CALLBACK
NeedRebootDlgProc(
IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
PDEVINSTDATA DevInstData;
UNREFERENCED_PARAMETER(wParam);
/* Retrieve pointer to the global setup data */
DevInstData = (PDEVINSTDATA)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
switch (uMsg)
{
case WM_INITDIALOG:
{
HWND hwndControl;
/* Get pointer to the global setup data */
DevInstData = (PDEVINSTDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)DevInstData);
/* Center the wizard window */
CenterWindow(GetParent(hwndDlg));
hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL);
ShowWindow(hwndControl, SW_HIDE);
EnableWindow(hwndControl, FALSE);
SendDlgItemMessage(
hwndDlg,
IDC_DEVICE,
WM_SETTEXT,
0,
(LPARAM)DevInstData->drvInfoData.Description);
/* Set title font */
SendDlgItemMessage(
hwndDlg,
IDC_FINISHTITLE,
WM_SETFONT,
(WPARAM)DevInstData->hTitleFont,
(LPARAM)TRUE);
break;
}
case WM_NOTIFY:
{
LPNMHDR lpnm = (LPNMHDR)lParam;
switch (lpnm->code)
{
case PSN_SETACTIVE:
/* Enable the correct buttons on for the active page */
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_FINISH);
break;
case PSN_WIZBACK:
/* Handle a Back button click, if necessary */
break;
case PSN_WIZFINISH:
/* Handle a Finish button click, if necessary */
break;
default:
break;
}
break;
}
default:
break;
}
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static INT_PTR CALLBACK
@@ -1062,6 +1164,9 @@ FinishDlgProc(
DevInstData = (PDEVINSTDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)DevInstData);
/* Center the wizard window */
CenterWindow(GetParent(hwndDlg));
hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL);
ShowWindow(hwndControl, SW_HIDE);
EnableWindow(hwndControl, FALSE);
@@ -1112,7 +1217,7 @@ FinishDlgProc(
break;
}
return FALSE;
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}
static HFONT
@@ -1147,7 +1252,7 @@ DisplayWizard(
IN UINT startPage)
{
PROPSHEETHEADER psh;
HPROPSHEETPAGE ahpsp[IDD_FINISHPAGE + 1];
HPROPSHEETPAGE ahpsp[IDD_MAXIMUMPAGE + 1];
PROPSHEETPAGE psp;
/* Create the Welcome page */
@@ -1190,6 +1295,12 @@ DisplayWizard(
psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLFAILED);
ahpsp[IDD_INSTALLFAILED] = CreatePropertySheetPage(&psp);
/* Create the Need reboot page */
psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
psp.pfnDlgProc = (DLGPROC) NeedRebootDlgProc;
psp.pszTemplate = MAKEINTRESOURCE(IDD_NEEDREBOOT);
ahpsp[IDD_NEEDREBOOT] = CreatePropertySheetPage(&psp);
/* Create the Finish page */
psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
psp.pfnDlgProc = (DLGPROC) FinishDlgProc;
@@ -1201,7 +1312,7 @@ DisplayWizard(
psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
psh.hInstance = hDllInstance;
psh.hwndParent = hwndParent;
psh.nPages = IDD_FINISHPAGE + 1;
psh.nPages = IDD_MAXIMUMPAGE + 1;
psh.nStartPage = startPage;
psh.phpage = ahpsp;
psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);