Blank Dialogs for .NET Framework 2.0 Patches

Blank Dialogs for .NET Framework 2.0 Patches

  • Comments 6

When you download a patch for .NET Framework 2.0 and double-click to install it, you'll find that the dialog is missing some text as in the example below.

.NET Framework 2.0 Patch UI

This is due, in part, to a bug in Windows Installer when the ProductLanguage property is 0 in the Property table.

Windows Installer contains localized string tables for some basic text like for the Cancel button, and some errors that may be returned if the package can't be opened, a patch cannot be uninstalled, and other issues mainly before a package can even be loaded. Until the package is loaded and the ProductLanguage property is read, Windows Installer uses the user's default user interface language; after that, language resources are used according to the ProductLanguage property value. Localized strings are expected to be found in the ActionText table and the Error table, which includes strings such as Error 20, typically read in English as "Please wait while Windows configures [ProductName]", which should be displayed in the dialog above.

In Windows Installer 3.1 and prior, when ProductLanguage is 0 Windows Installer does not pick the right strings in another resource - a binary resource - nor does it even contain a lot of strings commonly found in the Error table. This is now fixed in Windows Installer 4.0 for Windows Vista.

Since the right common Error strings were not properly selected, the setup build team did not merge resources into the ActionText and Error tables. It was decided that displaying no text is better than displaying only English text. Before being released, this was also the case for Visual Studio 2005 but since VS was language-specific we made sure they merged the correct ActionText and Error table strings into the .msi file. To display localized strings in popup dialogs for language-neutral products where ProductLanguage = 0, we do embed "resource merge modules". These are .msm files that contain localized resources such as error strings and dialogs. When necessary, we extract a .msm file according to the user's default user interface language and extract what strings or dialogs we need. We cannot, unfortunately, use that approach to provide strings used in the basic UI you see above.

The wrapper that ships with the .NET Framework 2.0 redistributable is an external UI handler that does not, unfortunately, use localized transforms but instead processes messages from Windows Installer and displays localized text based on those messages. Since transforms are not used, no transforms are cached along with the product package so the patch UI will not contain text for some controls.

To fix this you can create a transform that will add localized strings to the ActionText and Error tables. You can do this in Orca, for example, following the instructions below.

  1. Extract the .NET Framework 2.0 .msi file from the redistributable package:

    dotnetfx.exe /c /t:"%CD%\dotnetfx"
  2. Open netfx.msi in Orca
  3. Select the Error table
  4. Shift + Click to select errors 0 through 1903, and press Delete, confirming deletion
  5. Click the Transform menu and select New Transform
  6. Click the Tables menu and select Import Tables...
  7. Browse to the Samples\SysMgmt\Msi\database\INTL sub-directory of the Platform SDK
  8. Change the file filter to "All Files (*.*)"
  9. Ctrl + Click to select ActionTe.ENU and Error.ENU (or any supported corresponding files for other languages, using the three-letter language abbreviation as the file extension)
  10. Click Open
  11. Click OK
  12. Click the Transform menu and select Transform Properties...
  13. Check Add Existing Row
  14. Click OK
  15. Click the Transform menu and select Generate Transform...
  16. Save the .mst file

I have created transforms for all languages contained in the Windows Installer SDK, along with strings.txt that describes what language - in both native and English names - each file contains.

When installing the redistributable, your bootstrap application will have to pick the correct UI transform however is necessary. You can then install the .NET Framework 2.0 redistributable with the following command.

dotnetfx.exe /c:"msiexec.exe /i netfx.msi /l*v install.log USING_EXUIH=1 TRANSFORMS=path\strings.enu.mst

Substitute path with the path to the transform you want to use, and of course substitute "enu" with the three-letter Windows language code you want to use during translation. Do be aware that this is the language that will be used when installing future patches since the transform is cached along with the product package. You cannot, unfortunately, transform a package when installing a patch; it must be done during the initial installation.

This approach is not officially supported by Microsoft, so please use caution. Future patches along with newer Windows Installer runtimes may resolve the localization problems discussed above, and using localized transforms in this manner may cause any solution to not work correctly based on the user's default user interface language. If you need to redistribute the .NET Framework 2.0 runtime, you might consider doing so silently with a basic "Please wait" sort of dialog or simply requiring that users first install the .NET Framework 2.0 from Windows Update, Microsoft Update, or some other distribution media. If you simply require a patch and the .NET Framework 2.0 is already installed, you must either install the patch silently or bear the empty dialog as you see above.

Leave a Comment
  • Please add 2 and 1 and type the answer here:
  • Post
  • > It was decided that displaying no text is
    > better than displaying only English text.

    If only English text were displayed, then this would be a low-to-moderate addition to the list of things that help users form opinions about Microsoft.  When no text is displayed, it becomes a moderate-to-high addition to the list.  When it turns out that the decision was deliberate, it's yet another cause for cynicism and hilarity.

    If English text were displayed, maybe there's a 20% chance that the user would understand it immediately (this ratio varies by country), and maybe a 20% chance that the user would find one of their colleagues who can read English better in order to explain it.  Fortunately this isn't a serious case.  But when no text is displayed, there's about a 0% chance that the user would understand it immediately, maybe a 20% chance that the user would find one of their colleagues who has a sufficiently long an cynical experience with Microsoft products, but a 0% chance that their colleague would be able to explain it, unless their colleague happened to read and remember your blog.  What a useful deliberate decision, not.  Fortunately this isn't a serious case.

    This sort of reminds me of the MSDN library as sold on CD/DVD.  Around 25% is documented in the language it's sold in.  Around 25% is documented in English.  Around 50% isn't documented in the version that it's sold in.  The missing 50% can usually be found in the English language version on CD/DVD and/or the English language version on Microsoft's web site.  Sometimes colleagues ask me to explain something to them that MSDN has in English, but sometimes they don't even know that there's a better page that they could ask about.  Now, even though the pages that do exist are around 75% accurate and still need experimentation, it would still be better to include the English text than to exclude them entirely.
  • There are geo-political issues with English-only text, and the vast majority of users will never see this dialog anyway since statistics show most patches for .NET are being run silently through deployment engines like Windows Update, Microsoft Update, Microsoft Software Update Services, etc.
  • I have gotten several questions in the past from customers who need to install the .NET Framework 2.0...
  • > There are geo-political issues with
    > English-only text

    I think I said that too.  However I still can't figure out how blank is better than English.  Consider the English part of the explanatory message in this screenshot:

    Do you really think it would be better to leave that blank?

    The Japanese version of MSDN is 25% English and 25% missing (very rough guestimates).  That doesn't mean another 25% should be blanked out.  Even though 50% English would be inferior to 100% Japanese, it would still be better than either 25% missing or 50% missing.
  • The What's New section of the Windows Installer 4.5 CHM available in the downloads section of the Windows

  • PingBack from

Page 1 of 1 (6 items)