The Windows 7 MUI Black Screen of Death Spectacular, or “Why Can’t I Change Languages with DISM?”

[Last Reviewed: 2018-11-17]

Here’s a scenario: You’re a global organization looking to upgrade your remaining fleet of Windows 7 machines. Your fleet contains multiple locales–your Frankfurt location runs de-DE, and your Shanghai location runs zh-CN.

If you were to run an IPU on these machines using your en-US image, you’d discover pretty quickly that the IPU doesn’t complete. It’ll fail because the upgrade image’s UI language needs to match the host machine’s UI language.

There’s a great article written by Wilhelm Kocher that addresses this. In his solution, the en-US language pack is installed on the host machine, the default UI language is changed to en-US, then the IPU is completed. Afterwards, the host’s UI language is changed back to the original. It’s a clever solution that keeps your task sequences consistent, and saves space on your distribution points.

In testing this solution, I noticed a curious behavior. If I ran the IPU against a fresh Windows 7 SP1 install, the IPU was successful. If I ran the IPU against a fully-patched Windows 7 SP1 install, the machine would enter a “black screen of death” after the host machine’s UI language was changed to en-US. The only way to save the machine in this state was to spam F8 at boot and load a previously known-good configuration.

I opened a case with Microsoft on this, and a root cause was found! When the machine boots with the new UI language, the LSASS process fails prematurely because it can’t load the en-US strings from lsasrv.dll.mui for some well-known SIDs.

To resolve this issue, a new lsasrv.dll.mui for en-US was created that contains the missing strings.

The Resolution

This solution is provided “AS IS” with no warranties, and confers no rights. This solution is not officially supported.
This solution should be thoroughly tested before rolling out to your environment.

Preface: Windows 7 left mainstream support in 2015, so I’m eternally grateful that support worked with me to provide this solution. That being said, the modified lsasrv.dll.mui will likely not be provided in an official patch. I’ve uploaded the file I received from Microsoft to my GitHub repository, and you can download it from here: https://github.com/altrhombus/lsasrv-mui

To resolve this issue, all we have to do is replace the lsasrv.dll.mui that is placed in C:\Windows\system32\en-US after the language pack is installed. This should be done after the computer has been rebooted into Windows PE, but before the UI Language is changed.

In this task sequence, lsasrv.dll.ui was downloaded to C:\lsasrv prior to the reboot (to allow internet-based users to run the task sequence). During the “Update lsasrv.dll.mui” step, we run the following:

cmd.exe /c copy /Y %_OSDDetectedWinDrive%\lsasrv\lsasrv.dll.mui %_OSDDetectedWinDir%\system32\en-us

And that’s it! Now you can IPU your Windows 7 installation base regardless of the UI language–all while saving space on your distribution points.

Leave a Comment