mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:33:10 +00:00
- search for ReactOS installation cd and try locate directly the unattend.inf. This allows us to use the _same_ unattend.inf which is used in usetup. As a result we no longer need to put a second unattend.inf in the reactos.cab which revives the bootcdregtest
svn path=/trunk/; revision=28616
This commit is contained in:
parent
c7416046e2
commit
3e30ff41ef
1 changed files with 101 additions and 16 deletions
|
@ -60,6 +60,8 @@ static SETUPDATA SetupData;
|
||||||
|
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
BOOL
|
||||||
|
GetRosInstallCD(WCHAR * szPath, DWORD dwPathLength);
|
||||||
|
|
||||||
#ifdef VMWINST
|
#ifdef VMWINST
|
||||||
static BOOL
|
static BOOL
|
||||||
|
@ -779,7 +781,7 @@ SetKeyboardLayoutName(HWND hwnd)
|
||||||
|
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
RunControlPanelApplet(HWND hwnd, TCHAR *lpCommandLine)
|
RunControlPanelApplet(HWND hwnd, WCHAR *lpCommandLine)
|
||||||
{
|
{
|
||||||
STARTUPINFO StartupInfo;
|
STARTUPINFO StartupInfo;
|
||||||
PROCESS_INFORMATION ProcessInformation;
|
PROCESS_INFORMATION ProcessInformation;
|
||||||
|
@ -787,7 +789,7 @@ RunControlPanelApplet(HWND hwnd, TCHAR *lpCommandLine)
|
||||||
ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
|
ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
|
||||||
StartupInfo.cb = sizeof(STARTUPINFO);
|
StartupInfo.cb = sizeof(STARTUPINFO);
|
||||||
|
|
||||||
if (!CreateProcess(NULL,
|
if (!CreateProcessW(NULL,
|
||||||
lpCommandLine,
|
lpCommandLine,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -815,7 +817,7 @@ LocalePageDlgProc(HWND hwndDlg,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
PSETUPDATA SetupData;
|
PSETUPDATA SetupData;
|
||||||
TCHAR szBuffer[MAX_PATH];
|
WCHAR szBuffer[1024];
|
||||||
|
|
||||||
/* Retrieve pointer to the global setup data */
|
/* Retrieve pointer to the global setup data */
|
||||||
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
|
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
|
||||||
|
@ -841,7 +843,7 @@ LocalePageDlgProc(HWND hwndDlg,
|
||||||
{
|
{
|
||||||
case IDC_CUSTOMLOCALE:
|
case IDC_CUSTOMLOCALE:
|
||||||
{
|
{
|
||||||
_tcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,5"));
|
wcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,5"));
|
||||||
RunControlPanelApplet(hwndDlg, szBuffer);
|
RunControlPanelApplet(hwndDlg, szBuffer);
|
||||||
/* FIXME: Update input locale name */
|
/* FIXME: Update input locale name */
|
||||||
}
|
}
|
||||||
|
@ -849,7 +851,7 @@ LocalePageDlgProc(HWND hwndDlg,
|
||||||
|
|
||||||
case IDC_CUSTOMLAYOUT:
|
case IDC_CUSTOMLAYOUT:
|
||||||
{
|
{
|
||||||
_tcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL main.cpl,@1"));
|
wcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL main.cpl,@1"));
|
||||||
RunControlPanelApplet(hwndDlg, szBuffer);
|
RunControlPanelApplet(hwndDlg, szBuffer);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -868,7 +870,16 @@ LocalePageDlgProc(HWND hwndDlg,
|
||||||
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
|
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
|
||||||
if (SetupData->UnattendSetup)
|
if (SetupData->UnattendSetup)
|
||||||
{
|
{
|
||||||
_tcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,/f:\"unattend.inf\""));
|
WCHAR szPath[MAX_PATH];
|
||||||
|
if (GetRosInstallCD(szPath, MAX_PATH))
|
||||||
|
{
|
||||||
|
wsprintf(szBuffer, L"rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,/f:\"%s\\reactos\\unattend.inf\"", szPath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wcscpy(szBuffer, L"rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,/f:\"unattend.inf\"");
|
||||||
|
}
|
||||||
|
|
||||||
RunControlPanelApplet(hwndDlg, szBuffer);
|
RunControlPanelApplet(hwndDlg, szBuffer);
|
||||||
SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_DATETIMEPAGE);
|
SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_DATETIMEPAGE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -2144,6 +2155,89 @@ ProcessUnattendInf(HINF hUnattendedInf)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GetRosInstallCD should find the path to ros installation medium
|
||||||
|
* BUG 1
|
||||||
|
* If there are more than one CDDrive in it containing a ReactOS
|
||||||
|
* installation cd, then it will pick the first one regardless if
|
||||||
|
* it is really the installation cd
|
||||||
|
*
|
||||||
|
* The best way to implement this is to set the key
|
||||||
|
* HKLM\Software\Microsoft\Windows NT\CurrentVersion\SourcePath (REG_SZ)
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
GetRosInstallCD(WCHAR * szPath, DWORD dwPathLength)
|
||||||
|
{
|
||||||
|
WCHAR szDrives[512];
|
||||||
|
WCHAR szDrive[] = L"D:\\";
|
||||||
|
DWORD dwLength, dwIndex;
|
||||||
|
WCHAR * pDrive;
|
||||||
|
dwLength = GetLogicalDriveStringsW(sizeof(szDrives) / sizeof(WCHAR), szDrives);
|
||||||
|
|
||||||
|
if (dwLength > (sizeof(szDrives) / sizeof(WCHAR)) || dwLength == 0)
|
||||||
|
{
|
||||||
|
/* buffer too small or failure */
|
||||||
|
LogItem(SYSSETUP_SEVERITY_INFORMATION, L"GetLogicalDriveStringsW failed");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pDrive = szDrives;
|
||||||
|
for (dwIndex = 0; dwIndex < dwLength; dwIndex++)
|
||||||
|
{
|
||||||
|
szDrive[0] = pDrive[dwIndex];
|
||||||
|
if (GetDriveType(szDrive) == DRIVE_CDROM)
|
||||||
|
{
|
||||||
|
WCHAR szBuffer[MAX_PATH];
|
||||||
|
wcscpy(szBuffer, szDrive);
|
||||||
|
wcscat(szBuffer, L"reactos\\ntoskrnl.exe");
|
||||||
|
LogItem(SYSSETUP_SEVERITY_INFORMATION, szBuffer);
|
||||||
|
if (FileExists(szBuffer, NULL))
|
||||||
|
{
|
||||||
|
wcsncpy(szPath, szDrive, dwPathLength);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ProcessUnattendSetup()
|
||||||
|
{
|
||||||
|
WCHAR szPath[MAX_PATH];
|
||||||
|
HINF hUnattendedInf;
|
||||||
|
DWORD dwLength;
|
||||||
|
|
||||||
|
if (!GetRosInstallCD(szPath, MAX_PATH))
|
||||||
|
{
|
||||||
|
/* no cd drive found */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dwLength = wcslen(szPath);
|
||||||
|
if (dwLength + 21 > MAX_PATH)
|
||||||
|
{
|
||||||
|
/* FIXME
|
||||||
|
* allocate bigger buffer
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wcscat(szPath, L"reactos\\unattend.inf");
|
||||||
|
|
||||||
|
hUnattendedInf = SetupOpenInfFileW(szPath,
|
||||||
|
NULL,
|
||||||
|
INF_STYLE_OLDNT,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (hUnattendedInf != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
SetupData.UnattendSetup = ProcessUnattendInf(hUnattendedInf);
|
||||||
|
SetupCloseInfFile(hUnattendedInf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
InstallWizard(VOID)
|
InstallWizard(VOID)
|
||||||
|
@ -2152,21 +2246,12 @@ InstallWizard(VOID)
|
||||||
HPROPSHEETPAGE ahpsp[8];
|
HPROPSHEETPAGE ahpsp[8];
|
||||||
PROPSHEETPAGE psp = {0};
|
PROPSHEETPAGE psp = {0};
|
||||||
UINT nPages = 0;
|
UINT nPages = 0;
|
||||||
HINF hUnattendedInf;
|
|
||||||
|
|
||||||
/* Clear setup data */
|
/* Clear setup data */
|
||||||
ZeroMemory(&SetupData, sizeof(SETUPDATA));
|
ZeroMemory(&SetupData, sizeof(SETUPDATA));
|
||||||
|
|
||||||
hUnattendedInf = SetupOpenInfFileW(L"unattend.inf",
|
ProcessUnattendSetup();
|
||||||
NULL,
|
|
||||||
INF_STYLE_OLDNT,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (hUnattendedInf != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
SetupData.UnattendSetup = ProcessUnattendInf(hUnattendedInf);
|
|
||||||
SetupCloseInfFile(hUnattendedInf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create the Welcome page */
|
/* Create the Welcome page */
|
||||||
psp.dwSize = sizeof(PROPSHEETPAGE);
|
psp.dwSize = sizeof(PROPSHEETPAGE);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue