diff --git a/base/system/winlogon/setup.c b/base/system/winlogon/setup.c index 7cec968e0e4..f5ef3673186 100644 --- a/base/system/winlogon/setup.c +++ b/base/system/winlogon/setup.c @@ -96,7 +96,7 @@ RunSetupThreadProc( /* Expand string (if applicable) */ if (dwType == REG_EXPAND_SZ) - ExpandEnvironmentStringsW(Shell, CommandLine, MAX_PATH); + ExpandEnvironmentStringsW(Shell, CommandLine, ARRAYSIZE(CommandLine)); else if (dwType == REG_SZ) wcscpy(CommandLine, Shell); else @@ -104,10 +104,12 @@ RunSetupThreadProc( TRACE("Should run '%s' now\n", debugstr_w(CommandLine)); + SwitchDesktop(WLSession->ApplicationDesktop); + /* Start process */ StartupInfo.cb = sizeof(StartupInfo); StartupInfo.lpReserved = NULL; - StartupInfo.lpDesktop = NULL; + StartupInfo.lpDesktop = L"WinSta0\\Default"; StartupInfo.lpTitle = NULL; StartupInfo.dwFlags = 0; StartupInfo.cbReserved2 = 0; @@ -126,6 +128,7 @@ RunSetupThreadProc( if (!Result) { TRACE("Failed to run setup process\n"); + SwitchDesktop(WLSession->WinlogonDesktop); return FALSE; } @@ -138,6 +141,8 @@ RunSetupThreadProc( CloseHandle(ProcessInformation.hThread); CloseHandle(ProcessInformation.hProcess); + SwitchDesktop(WLSession->WinlogonDesktop); + TRACE ("RunSetup() done\n"); return TRUE; diff --git a/base/system/winlogon/winlogon.c b/base/system/winlogon/winlogon.c index 2b2e5303f6e..eeba3a2334b 100644 --- a/base/system/winlogon/winlogon.c +++ b/base/system/winlogon/winlogon.c @@ -453,14 +453,14 @@ WinMain( /* Check for pending setup */ if (GetSetupType() != 0) { - TRACE("WL: Setup mode detected\n"); - /* Run setup and reboot when done */ - SwitchDesktop(WLSession->ApplicationDesktop); + TRACE("WL: Setup mode detected\n"); RunSetup(); } else + { PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_CTRL_ALT_DEL, 0); + } (void)LoadLibraryW(L"sfc_os.dll");