{"id":2133,"date":"2006-06-29T13:55:00","date_gmt":"2006-06-29T13:55:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/heaths\/2006\/06\/29\/blank-dialogs-for-net-framework-2-0-patches\/"},"modified":"2018-09-06T05:56:01","modified_gmt":"2018-09-06T05:56:01","slug":"blank-dialogs-for-net-framework-2-0-patches","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/setup\/blank-dialogs-for-net-framework-2-0-patches\/","title":{"rendered":"Blank Dialogs for .NET Framework 2.0 Patches"},"content":{"rendered":"<p>When you download a patch for .NET Framework 2.0 and double-click to install\nit, you&#039;ll find that the dialog is missing some text as in the example below.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/heaths\/wp-content\/uploads\/sites\/13\/2006\/06\/ndp_patch_ui.png\" alt=\".NET Framework 2.0 Patch UI\" \/><\/p>\n<p>This is due, in part, to a bug in Windows Installer when the\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/productlanguage.asp\">\nProductLanguage property<\/a> is 0 in the\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/property_table.asp\">\nProperty table<\/a>.<\/p>\n<p>Windows Installer contains localized string tables for some basic text like\nfor the Cancel button, and some errors that may be returned if the package can&#039;t\nbe opened, a patch cannot be uninstalled, and other issues mainly before a\npackage can even be loaded. Until the package is loaded and the ProductLanguage\nproperty is read, Windows Installer uses the user&#039;s default user interface\nlanguage; after that, language resources are used according to the\nProductLanguage property value. Localized strings are expected to be found in\nthe\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/actiontext_table.asp\">\nActionText table<\/a> and the\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/error_table.asp\">\nError table<\/a>, which includes strings such as Error 20, typically read in\nEnglish as &quot;Please wait while Windows configures [ProductName]&quot;, which should be\ndisplayed in the dialog above.<\/p>\n<p>In Windows Installer 3.1 and prior, when ProductLanguage is 0 Windows\nInstaller does not pick the right strings in another resource &#8211; a binary\nresource &#8211; nor does it even contain a lot of strings commonly found in the Error\ntable. This is now fixed in Windows Installer 4.0 for Windows Vista.<\/p>\n<p>Since the right common Error strings were not properly selected, the setup\nbuild team did not merge resources into the ActionText and Error tables. It was\ndecided that displaying no text is better than displaying only English text.\nBefore being released, this was also the case for Visual Studio 2005 but since\nVS was language-specific we made sure they merged the correct ActionText and\nError table strings into the <i>.msi<\/i> file. To display localized strings in\npopup dialogs for language-neutral products where ProductLanguage = 0, we do\nembed &quot;resource merge modules&quot;. These are <i>.msm<\/i> files that contain\nlocalized resources such as error strings and dialogs. When necessary, we\nextract a <i>.msm<\/i> file according to the user&#039;s default user interface\nlanguage and extract what strings or dialogs we need. We cannot, unfortunately,\nuse that approach to provide strings used in the\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/user_interface_levels.asp\">\nbasic UI<\/a> you see above.<\/p>\n<p>The wrapper that ships with the .NET Framework 2.0 redistributable is an\nexternal UI handler that does not, unfortunately, use localized transforms but\ninstead processes messages from Windows Installer and displays localized text\nbased on those messages. Since transforms are not used, no transforms are cached\nalong with the product package so the patch UI will not contain text for some\ncontrols.<\/p>\n<p>To fix this you can create a transform that will add localized strings to the\nActionText and Error tables. You can do this in Orca, for example, following the\ninstructions below.<\/p>\n<ol>\n<li>Extract the .NET Framework 2.0 <i>.msi<\/i> file from the redistributable\n\tpackage:<\/p>\n<p>\t<code>dotnetfx.exe \/c \/t:&quot;%CD%dotnetfx&quot;<\/code><br \/>\n&nbsp;<\/li>\n<li>Open <i>netfx.msi<\/i> in Orca<\/li>\n<li>Select the Error table<\/li>\n<li>Shift + Click to select errors 0 through 1903, and press Delete,\n\tconfirming deletion<\/li>\n<li>Click the <b>Transform<\/b> menu and select <b>New Transform<\/b><\/li>\n<li>Click the <b>Tables<\/b> menu and select <b>Import Tables&#8230;<\/b><\/li>\n<li>Browse to the <i>SamplesSysMgmtMsidatabaseINTL<\/i> sub-directory of\n\tthe Platform SDK<\/li>\n<li>Change the file filter to &quot;All Files (*.*)&quot;<\/li>\n<li>Ctrl + Click to select <i>ActionTe.ENU<\/i> and <i>Error.ENU<\/i> (or any\n\tsupported corresponding files for other languages, using the three-letter\n\tlanguage abbreviation as the file extension)<\/li>\n<li>Click <b>Open<\/b><\/li>\n<li>Click <b>OK<\/b><\/li>\n<li>Click the <b>Transform<\/b> menu and select <b>Transform Properties&#8230;<\/b><\/li>\n<li>Check <b>Add Existing Row<\/b><\/li>\n<li>Click <b>OK<\/b><\/li>\n<li>Click the <b>Transform<\/b> menu and select <b>Generate Transform&#8230;<\/b><\/li>\n<li>Save the <i>.mst<\/i> file<\/li>\n<\/ol>\n<p>I have created\n<a href=\"http:\/\/hstewart.members.winisp.net\/downloads\/strings.zip\">transforms<\/a>\nfor all languages contained in the Windows Installer SDK, along with <i>\nstrings.txt<\/i> that describes what language &#8211; in both native and English names\n&#8211; each file contains.<\/p>\n<p>When installing the redistributable, your bootstrap application will have to\npick the correct UI transform however is necessary. You can then install the\n.NET Framework 2.0 redistributable with the following command.<\/p>\n<p><code>dotnetfx.exe \/c:&quot;msiexec.exe \/i netfx.msi \/l*v install.log USING_EXUIH=1\nTRANSFORMS=<i>path<\/i>strings.enu.mst<\/code><\/p>\n<p>Substitute <i>path<\/i> with the path to the transform you want to use, and of\ncourse substitute &quot;enu&quot; with the three-letter Windows language code you want to\nuse during translation. Do be aware that this is the language that will be used\nwhen installing future patches since the transform is cached along with the\nproduct package. You cannot, unfortunately, transform a package when installing\na patch; it must be done during the initial installation.<\/p>\n<p>This approach is not officially supported by Microsoft, so please use\ncaution. Future patches along with newer Windows Installer runtimes may resolve\nthe localization problems discussed above, and using localized transforms in\nthis manner may cause any solution to not work correctly based on the user&#039;s\ndefault user interface language. If you need to redistribute the .NET Framework\n2.0 runtime, you might consider doing so silently with a basic &quot;Please wait&quot;\nsort of dialog or simply requiring that users first install the .NET Framework\n2.0 from Windows Update, Microsoft Update, or some other distribution media. If\nyou simply require a patch and the .NET Framework 2.0 is already installed, you\nmust either install the patch silently or bear the empty dialog as you see\nabove.<\/p>\n<p><a href=\"http:\/\/hstewart.members.winisp.net\/downloads\/strings.zip\">http:\/\/hstewart.members.winisp.net\/downloads\/strings.zip<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When you download a patch for .NET Framework 2.0 and double-click to install it, you&#039;ll find that the dialog is missing some text as in the example below. 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 [&hellip;]<\/p>\n","protected":false},"author":389,"featured_media":3843,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[20],"class_list":["post-2133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-installation"],"acf":[],"blog_post_summary":"<p>When you download a patch for .NET Framework 2.0 and double-click to install it, you&#039;ll find that the dialog is missing some text as in the example below. 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 [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/2133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/users\/389"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/comments?post=2133"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/2133\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/media\/3843"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/media?parent=2133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/categories?post=2133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/tags?post=2133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}