Partilhar via


Creating an installable layout for the .NET Framework 3.5 that includes language packs

A little while ago, I posted this item on my blog that describes a potential issue when installing the .NET Framework 3.5 on a non-English operating system.  Over this past weekend, I noticed a related item on Aaron Ruckman's blog that I wanted to link to here.  In his post, Aaron describes some .NET Framework installation scenarios related to language packs.

To summarize his post, there are a few key things to keep in mind when installing the .NET Framework 3.5 along with .NET Framework 3.5 language packs:

1. Using the /lang switch with .NET Framework 3.5 setup

By default, the .NET Framework 3.5 setup will detect the language of the OS that setup is running on and attempt to install a .NET Framework 3.5 language pack to match the OS language if one is available.  The .NET Framework 3.5 setup contains a command line switched named /lang.  This switch allows you to override the default behavior and force .NET Framework 3.5 setup to install a specific language pack (or no language packs at all) instead of installing a language pack that matches the OS language.

For example, this command line will cause the .NET Framework 3.5 to not install any language packs:

dotnetfx35setup.exe /lang:ENU

This command line will cause the .NET Framework 3.5 to install the French language pack:

dotnetfx35setup.exe /lang:FRA

Note that the /lang switch only works during initial installation of the .NET Framework 3.5.  If you run .NET Framework 3.5 setup in repair mode and attempt to pass in the /lang switch, the value you provide with /lang will be ignored.

2. Creating an installable .NET Framework 3.5 layout that includes language packs

I previously posted some information about creating an installable layout for the .NET Framework 3.5 in this blog post.  If you want to create an installable layout for the .NET Framework 3.5 that includes one or more .NET Framework 3.5 language packs, you can first follow the instructions in that previous blog post to create an installable layout for the .NET Framework 3.5 core package.  Then you can download and copy the setup packages for the .NET Framework 3.5 language packs into the .NET Framework 3.5 layout you previously created.  There are separate language packs for each processor architecture, and they must be copied to the appropriate sub-folders of the .NET Framework 3.5 layout as follows:

  • For x86, you will copy the .NET Framework 3.5 language pack setup packages to the subfolder named \wcu\dotnetframework\dotnetfx35\x86
  • For x64, you will copy the .NET Framework 3.5 language pack setup packages to the subfolder named \wcu\dotnetframework\dotnetfx35\x64
  • For ia64, you will copy the .NET Framework 3.5 language pack setup packages to the subfolder named \wcu\dotnetframework\dotnetfx35\ia64

3. Deploying the .NET Framework 3.5 with multiple language packs

The most reliable way to deploy the .NET Framework 3.5 along with one or more .NET Framework 3.5 language packs is to first deploy the .NET Framework 3.5 core package and then individually deploy each of the desired language packs.  This method will prevent the .NET Framework 3.5 from installing potentially undesired language packs depending on the language of the user's OS.  The steps to do this look like the following:

  • Create an installable .NET Framework 3.5 layout using the method described in item 2 above
  • Install the .NET Framework 3.5 core package by running dotnetfx35setup.exe /lang:ENU /q /norestart
  • Install each language pack by running the individual language pack setup EXE.  For example, to install the x86 French language pack, you would run \wcu\dotnetframework\dotnetfx35\x86\dotnetfx35langpack_x86fr.exe /q /norestart

Comments

  • Anonymous
    January 25, 2008
    The official deployment guides for system administrators and application developers have been posted

  • Anonymous
    January 25, 2008
    The official deployment guides for system administrators and application developers have been posted

  • Anonymous
    April 09, 2008
    Question: I am working on creating an installable layout for the .NET Framework 3.5 that includes language

  • Anonymous
    July 29, 2008
    How much of this information will change with the up coming 3.5 SP1? Will there be new language packs (or can I use the existing 3.5 ones)?

  • Anonymous
    July 29, 2008
    Hi Dvystrcil - The underlying structure of the install point will be the same in the .NET Framework 3.5 SP1, but there will be updated payload for all of the packages, including the language packs.  The detection logic in 3.5 SP1 will not detect the original 3.5 language packs and instead will enforce that you install the 3.5 SP1 language packs. I will post some updates on my blog once the .NET Framework 3.5 SP1 is available to try to better explain what changes you'll need to make to create a 3.5 SP1 install point.

  • Anonymous
    November 10, 2008
    Hello, I'm a french user and i'm searching how to integrate the french language pack in my Administrative Install of .NET Framework 3.5 SP1. A short sample batch will be very useful, not only for me i presume. Thanks!

  • Anonymous
    November 17, 2008
    Hi Darkrem - The steps for adding language packs to a .NET Framework 3.5 install point are very simple - create an install point for the main .NET Framework 3.5 product (using the steps at http://blogs.msdn.com/astebner/archive/2007/12/03/6646794.aspx), then download the language pack installer(s) that you want to include, and copy them into the dotnetfx35x86, dotnetfx35x64 or dotnetfx35ia64 folder in your .NET Framework 3.5 layout.  There isn't really a script that you can write to do this because it requires downloading the language packs from a separate location. Let me know if you have any problems getting this to work on your system.

  • Anonymous
    August 04, 2011
    The comment has been removed

  • Anonymous
    August 05, 2011
    Hi Anton - Error code 2728 means "Table definition error: [2]"  This likely means that there is something wrong with the administrative layout that you created for this language pack.  Can you post the exact steps you used to extract the .NET Framework 3.5 SP1 installer and create this administrative install point, including the full command lines you ran?  Hopefully I'll be able to spot something from there in order to suggest possible solutions.

  • Anonymous
    August 05, 2011
    Yes, I see that, but why does this happen. There is no such error during x64 AIP creation. I've emailed all steps and net framework 3 sp2 language pack aip creation log to you by "Email Blog Author" form.

  • Anonymous
    August 05, 2011
    Hi Anton - I'm guessing that the AIP creation steps are incomplete or something like that.  I haven't yet gotten any email notifications, so would it be possible for you to post the steps here instead? Please don't copy the full log file into the comment form though.  Instead, please upload the log file to a file server such as http://skydrive.live.com and then reply here and provide a link that I can use to download the log file.

  • Anonymous
    August 06, 2011
    link skydrive.live.com/redir.aspx

  • Anonymous
    August 08, 2011
    Hi Anton - I don't know how to explain the error that you're seeing.  The command lines look to me like they should work.  Are there any errors in the log files from when you ran msiexec /a in this scenario?  Are you able to view the resultant MSI in Orca?

  • Anonymous
    December 10, 2012
    === Начало записи журнала: 11.12.2012  12:22:30 === Действие 12:22:30: ADMIN. Начало действия 12:22:30: ADMIN. Действие 12:22:30: CostInitialize. Вычисление необходимого свободного места Начало действия 12:22:30: CostInitialize. Завершение действия 12:22:30: CostInitialize. Возвращенное значение 1. Действие 12:22:30: FileCost. Вычисление необходимого свободного места Начало действия 12:22:30: FileCost. Завершение действия 12:22:30: FileCost. Возвращенное значение 1. Действие 12:22:30: CostFinalize. Вычисление необходимого свободного места Начало действия 12:22:30: CostFinalize. Завершение действия 12:22:30: CostFinalize. Возвращенное значение 1. Действие 12:22:30: ExecuteAction. Начало действия 12:22:30: ExecuteAction. Начало действия 12:22:30: ADMIN. Начало действия 12:22:30: CostInitialize. DEBUG: Error 2728:  Table definition error: Component Программа установки обнаружила  непредвиденную ошибку при установке данного пакета. Возможно пакет установлен неверно. Код ошибки 2728.  Аргументы: Component, , MSI (s) (08:9C) [12:22:32:460]: Продукт: Microsoft .NET Framework 3.0 Service Pack 2 Language Pack - RUS -- Программа установки обнаружила  непредвиденную ошибку при установке данного пакета. Возможно пакет установлен неверно. Код ошибки 2728.  Аргументы: Component, , Завершение действия 12:22:32: CostInitialize. Возвращенное значение 3. Завершение действия 12:22:32: ADMIN. Возвращенное значение 3. Завершение действия 12:22:32: ExecuteAction. Возвращенное значение 3. Завершение действия 12:22:32: ADMIN. Возвращенное значение 3. === Завершение записи журнала: 11.12.2012  12:22:32 === MSI (c) (88:90) [12:22:32:569]: Продукт: Microsoft .NET Framework 3.0 Service Pack 2 Language Pack - RUS -- Установка не выполнена.

  • Anonymous
    December 11, 2012
    Hi Andrey - I'd suggest using the steps at blogs.msdn.com/.../487096.aspx to fully remove any older versions of the .NET Framework 3.0 Russian Language Pack that you have installed on your computer and then try again to install the .NET Framework 3.0 SP2 Russian Language Pack.