[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