[wpkg-users] Installing Microsoft.NET 4.0

Rainer Meier r.meier at wpkg.org
Fri Feb 17 13:13:32 CET 2012


Hi Malte,

> I unpacked that dotnetfx40.exe with 7-zip into %SOFTWARE%\dotnet4\ which
> extracts among other things the "real" setup.exe. That one I then call as:
> %SOFTWARE%\dotnet4\setup.exe /q /norestart /x86 /x64
> This not only saves a little time for the initial extraction phase which is
> now only performed once instead of once for every client, but ... [contd]

I did that extraction for .NET runtime 3.5 but I think it does not make a major 
difference. On the other hand it will also increase network traffic. Extracted 
.NET 4.0 Client framework is about 200MB in size while the installer is just 
about 50MB. Usually CPU resources on client is not an issue but saving network 
bandwidth might be more important.


> ...also prevents additional downloads AFAIK, although I must admit I haven't
> verified this recently.  Anyway, we still have some older machines where this
> command takes more than an hour, so I needed to raise the timeout to 7200
> secs.

I am not sure about this. I think it might also be related to download of 
localization packs which are not included in offline installer. For .NET 3.5 
I've used the /lang:ENU switch to prevent downloading any other language packs 
which I thought removed the installation time tremendously.

Hmm, just notice I did not add this switch to .NET 4.0, maybe I have to try (or 
I tried already and it did not work for .NET 4.0).

> I'd say most of this performance nightmare is due to the lovely combination of
> the setup creating quite alot of DLLs and the virus scanner getting nervous
> about that.

I don't think this is a major issue. I have seen this happening even when no 
antivirus was yet installed (initial system setup). Moreover antivirus is 
usually limited by disk bandwidth or CPU and the installer seems to "pause" for 
a while at no CPU or disk activity.
Although after installation of .NET it will typically run ngen to re-build all 
classes which is really PITA design. I think this is also one of the reasons all 
.NET updates received via Windows Update often take ages to install.

Actually I've even prepared a script which allows me to run queued items (ngen) 
in order to run it before I ship machines to customers - so it won't run in the 
background for hours. See listing at the end of this message.


Another issue is that some applications contain a LOT of components and Windows 
installer seems to be pretty slow at processing them. Mainly I've noticed this 
during OpenOffice.org/LibreOffice deployment where on many machines it takes ~30 
minutes to install it. Removing unused help and language pack components allowed 
me to reduce LibreOffice installation time to about 2 minutes (where it takes 
about 20 on this machine with default feature set). Also see my documentation of 
my LibreOffice deployment here: <http://wpkg.org/LibreOffice#LibreOffice_3.5.x>

But this is getting OT as .NET does not have components to be excluded as far as 
I know.


br,
Rainer

=====
@echo off

:: This script executes queued .NET items like runtime optimization and queued
:: re-compilation.

:: Exit code.
set EXIT_CODE=0

setlocal enabledelayedexpansion

echo Executing queued items.
if not exist "%SystemRoot%\Microsoft.NET\Framework" goto skip32bit
:: start ".NET Framework %%I 32-bit queued items"
for /f %%I IN ('dir /O:-N /b "%SystemRoot%\Microsoft.NET\Framework\v*"') DO (
   if exist "%SystemRoot%\Microsoft.NET\Framework\%%I\ngen.exe" (
     echo.
     echo.
     echo.
     echo.
     echo #######################################################################
     echo Executing delayed tasks for version %%I 32-bit
     echo #######################################################################
     echo.
     echo.
   	"%SystemRoot%\Microsoft.NET\Framework\%%I\ngen.exe" executeQueuedItems 
/nologo /silent
	if !ERRORLEVEL! GTR !EXIT_CODE! set EXIT_CODE=!ERRORLEVEL!
   )
)
:skip32bit

if not exist "%SystemRoot%\Microsoft.NET\Framework64" goto skip64bit
:: start ".NET Framework %%I 64-bit queued items"
for /f %%I IN ('dir /O:-N /b "%SystemRoot%\Microsoft.NET\Framework64\v*"') DO (
   if exist "%SystemRoot%\Microsoft.NET\Framework64\%%I\ngen.exe" (
     echo.
     echo.
     echo.
     echo.
     echo #######################################################################
     echo Executing delayed tasks for version %%I 64-bit
     echo #######################################################################
     echo.
     echo.
   	"%SystemRoot%\Microsoft.NET\Framework64\%%I\ngen.exe" executeQueuedItems 
/nologo /silent
	if !ERRORLEVEL! GTR !EXIT_CODE! set EXIT_CODE=!ERRORLEVEL!
   )
)
:skip64bit

endlocal

pause
exit /b %EXIT_CODE%
=====



More information about the wpkg-users mailing list