Blank Screen during OOBE (Windows 11 IoT Enterprise LTSC 2024) when Custom Shell is enabled using Shell Launcher V2

Mark Bewley 51 Reputation points
2024-09-20T14:44:04.9233333+00:00

I am getting a blank screen during OOBE if a custom shell is enabled, using the Shell Launcher V2 capability (CustomShellHost.exe).

Evaluating the latest Win11 IoT Enterprise LTSC 2024 release we boot to Audit mode. A simple unattend.xml is specified to sysprep to OOBE.

After the "Just a moment..." screen disappears it just displays a blank screen (mouse cursor shows and there is regular drive light activity). If power cycled, it shows the "Just a moment..." screen again, but after a few seconds of blank scree, the OOBE screens are displayed.

I have seen the OOBE screens correctly display if a network cable is attached - but not been able to replicate this in more recent testing.

Windows for business | Windows for IoT
Windows for business | Windows Client for IT Pros | User experience | Other
{count} votes

3 answers

Sort by: Most helpful
  1. Wesley Li 11,255 Reputation points
    2024-09-20T15:49:50.2533333+00:00

    Hello

    From the information I found, there doesn't seem to be a direct solution to this specific issue. However, here are a few steps you might consider to troubleshoot and potentially resolve the problem:

     

    Check Unattend.xml Configuration: Ensure that your unattend.xml file is correctly configured and does not have any settings that might be causing the issue when there is no network connection.

     

    Review Logs: Check the setup logs located in C:\Windows\Panther and C:\Windows\Panther\UnattendGC for any errors or warnings that might give you more insight into what is causing the blank screen.

     

    Network Dependencies: Verify if there are any network dependencies in your OOBE setup that might be causing the issue. Sometimes, certain configurations or scripts might require a network connection to proceed.

     

    Update Drivers: Ensure that all drivers, especially network drivers, are up to date. Sometimes, outdated drivers can cause unexpected behavior during the OOBE process.


  2. Sean Liming 4,766 Reputation points Volunteer Moderator
    2024-10-07T00:20:49.4233333+00:00

    @Mark Bewley Per the comments-

    If your application is not a UWP application, I recommend using Shell Launcher V1 rather than V2. The Shell Launcher APIs can be used to configure Shell Launcher. My Shell Launcher command line utility can help with the setup: https://annabooks.com/SW_SLUtility.html


  3. Mark Bewley 51 Reputation points
    2025-04-07T14:58:08.9+00:00

    The cause of my issue is the usage of group SID in my configuration xml. The account created by Windows for OOBE, defaultuser0, is falling into a group that would display the custom shell.

    For OOBE to display correctly, I needed to ensure that, for defaultuser0, the default profile (explorer.exe) is loaded. I cannot directly specify defaultuser0 in the configuration xml, as it has not yet been created.

    To be able to have the custom shell appear post-OOBE I needed to do the following:

    • Create a user account in Audit Mode.
    • Create an configuration xml, that uses the sid of that user account to display the custom shell and apply it.
    <?xml version="1.0" encoding="utf-8"?>
    <ShellLauncherConfiguration xmlns="http://schemas.microsoft.com/ShellLauncher/2018/Configuration" xmlns:v2="http://schemas.microsoft.com/ShellLauncher/2019/Configuration">
        <Profiles>
            <DefaultProfile>
                <Shell Shell="%systemroot%\explorer.exe">
                    <DefaultAction Action="RestartShell"/>
                </Shell>
            </DefaultProfile>
            <Profile Id="{4B5F92B0-C10E-40AD-A25D-0F9C0224BAB2}">
                <Shell Shell="%windir%\OEM\CustomShell.exe">
                    <ReturnCodeActions>
                        <ReturnCodeAction ReturnCode="0" Action="RestartShell"/>
                        <ReturnCodeAction ReturnCode="-1" Action="RestartDevice"/>
                        <ReturnCodeAction ReturnCode="255" Action="ShutdownDevice"/>
                        <ReturnCodeAction ReturnCode="1" Action="DoNothing"/>
                    </ReturnCodeActions>
                    <DefaultAction Action="RestartShell"/>
                </Shell>
            </Profile>
        </Profiles>
        <Configs>
            <Config>
                <!-- Sid can be user sid, local group sid, and AD group sid -->
                <Account Sid="..."/>
                <Profile Id="{4B5F92B0-C10E-40AD-A25D-0F9C0224BAB2}"/>
            </Config>
        </Configs>
    </ShellLauncherConfiguration>
    
    • Set auto logon to that user account.
    • Run Sysprep to enter OOBE.

    Now OOBE successfully completes and the custom shell is displayed. I can then run some post-OOBE tasks to deploy the original custom shell configuration and change the auto logon account.

    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.