Welcome to MSFN

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.


Silent .NET Maker synthesized 20100118 - W2K/XP/2K3 x86

1,004 posts in this topic

SNMsynth script builds highly customizable .NET switchless installers/nLite-RVM Integrator add-ons, supporting all latest .NET framework versions, and all its hotfixes and langpacks for win 2K/XP/2K3 x86 up to date, allowing to build the installers/add-ons to your liking, giving you full control about when to install what, and how. Besides, it provides fixes to some .NET annoyances, allows outdated subcomponents removal or substitution, and optimizes installers size.

This guide contains all information you need to build your custom packets and more, so you can avoid to read the whole thread. That's why it's so long, but process complexity is inversely proportional, see Instructions section bellow.

The stuff in this method is based in the excellent Silent .NET Maker script by Tomcat76 to which it adds new features or simplify it, but the basis are the same administrative installs. We must thank Tomcat76, Oleg_Sch, Acheron, gora, mickmack, antoineL, Stephan (from ryanvm.net), YumeYao, user_hidden and Pasha_ZZZ for providing solutions to this method, and ferk, DarkShadows, SipTomi, CEoCEo, bruno32600, ercofra, Dumpy Dooby, bphlpt and BugsBunny for fixing bugs; and all the people who helped pointing bugs, testing and making suggestions in the production of this script (you'll find their posts in this and SNM threads). I want to specially thank Aaron Stebner for his splendid blog and solutions it provided to this method.

SNMsynth builds custom unattended installers with the following features:

  • Optimized for each target win version. This means you should build installer(s)/add-on(s) for each suportted target win version you need them for.
  • Work with custom default switchless mode out of:
    -- Passive: Unzipping and installing progress bars, no cancel button.
    -- Silent: No feedback, even from unzipping. To supervise the installing you have to use Task Manager or command line tasklist.
    Switches can be used to change default behavior. Even nLite/RVMI add-ons can use them, see Installing section bellow.
  • Can be packaged as T-13 and/or RunOnceEx nLite/RVM Integrator add-on(s). Installers can be extracted from them. ROE add-ons runs from CD not copying .inf nor sfx files to HD.
  • Are compatible with HFSLIP if used switchless, whether you used installers or add-ons (through HFAAO folder).
  • .NET frameworks can be packaged in a flexible way. You can apply or not hotfixes and langpacks (any working combination). All framework versions can be merged All In One (AIO) in a installer, or you can merge framework subsets; you can build single framework installers. You can remove or replace certain framework subcomponents, allowing you to install them from another updated source, by replacing them in the installers/add-ons or by external install, or simply to get rid of them. See _SNMsynth.ini section bellow.
  • Can integrate multiple languages for each framework #.# version, intended for MUI or servers.
  • Avoid win/ms update to prompt KB928416 (3.0 SP0 langpacks) and KB829019 (2.0 SP0 PT-BR langpack) pointless updates when the right upper version langpack is installed.
  • Work around old problem installing .NET 3.0 framework at T-13 with SVCPACK.inf or T-13 nLite/RVMI add-ons, and later uninstalling (in every circumstance) getting:

    Error 2004. Method GetFontCacheDataFolder failed. HRESULT: 0x80004005

    Error 2004. Method SHGetFolderPath failed. HRESULT: 0x80004005

    SNMsynth installers/add-ons containing 3.0 SP2 (not possible for 3.0 SP1) framework avoid these errors, having a clean install/uninstall. I found these errors begin with the "Font Cache Service" installer/uninstaller DLL from 3.0 frameworks, which "RemoveFontCacheData" entry point, has probably a bug and it's not able, during GUI setup, to resolve CSIDL reference for font cache file folder when it tries to remove any previous font cache file.
    For 3.0 SP1 users problem remains, so if you install 3.0 SP1 at T-13 unattended, you'll get those errors in the event viewer for silent install, and for passive one, you'll also get 2 error boxes pausing the unattended installl. Not doing this, you still get these errors boxes when you uninstall 3.0 SP1 framework (curiously), and the font cache file is not removed from the user profile, but this doesn't harm at all.

  • Slim down to the minimum size .NET 3.5 SP# and their langpacks, through YumeYao's method. Besides size reduction, it also means that the first step to uninstall 3.5 SP# from add/remove programs, a superfluous installer encapsulation used to check for langpack updates in original installers, is removed making uninstall in 2 clicks, and pretty faster. It is removed too if 2.0 framework is processed from single original installer.
  • Avoid win/ms update to prompt .NET 3.5 SP1 Family update KB951847 for WXP/2K3. KB951847 is an ad-hoc update deployed by win/ms update to complete your own installed .NET set with the parts missing from 3.5 SP1 family set:

    2.0 SP2 + NDP20SP2-KB958481-x86.exe + 2.0 SP2 langpack (matching OS language) +

    3.0 SP2 + NDP30SP2-KB958483-x86.exe + 3.0 SP2 langpack (matching OS language) +

    3.5 SP1 + NDP35SP1-KB958484-x86.exe + 3.5 SP1 langpack (matching OS language)

    So actually doesn't add anything novel. This method applies a fix to allow seamless install/remove operations for each #.# SP# framework version from the above set individually, avoiding KB951847 (size variable depending on missing components) being prompted from update system. This fix requires, for each framework #.# SP# version you're processing from the above set, you include all the items of its group; i.e. all items from its respective line in the set above.

  • Allow to avoid install, or even completely remove from custom installers/add-ons containing 3.5 SP# framework, Windows Presentation Foundation plugin for Firefox and mozilla browsers. This plugin adds XBAP technollogy to Firefox and mozilla browsers (like that IE always gets also from that framework). Some people dislikes this plugin in their Firefox or mozilla browser because it is installed inadvertedly and opens a new space for browser application exectution, hence a potential risk. Besides, you can disable but not uninstall it by common means without uninstalling .NET 3.5 SP1. Here is a procedure (I have not tested, if you do post about it) to do it.
  • Allow to avoid install, or even completely remove from custom installers/add-ons containing 3.5 SP1 framework, .NET Framework Assistant 1.0 add-on (extension) for Firefox. This extension adds ClickOnce technollogy to Firefox (like that IE always gets also from that framework), and it is installed with .NET 3.5 SP1 (unless you remove it through _SNMsynth.ini settings, or avoid to install it with a switch). Some people dislikes this add-on in his FF because it is installed inadvertedly, and it opens a new door for software deployment, hence a potential risk. Besides it couldn't be uninstalled by common means until KB963707 was issued to update this extension, but new problems appeared (info in this link could be outdated), and it doesn't allow to completely remove it, residual it leaves still can cause problems (link contain some work around info, this could be useful also). <<<--- This would require your attention to completely uninstall .NET Framework Assistant 1.0.
  • Precompile assemblies. This means installing last longer but doesn't left unfinished tasks to complete later on idle time (default .NET behavior).
  • Create install logs under %TEMP% folder (except you're installing at T-13 or later from GUI setup, in which case it get created in %SYSTEMROOT%), with filenames with the following pattern: DNF11install.log, DNF11lnginstall.log, etc. thus removing old install logs on each run, and allowing easy identification. Uninstall logs keep MSIXXXXX.log random pattern under %TEMP% folder.
  • Remove pointless modify and repair buttons, in addition to all subcomponents and hotfixes useless entries under "Add/Remove Programs" list (only in the list). I.e., after installing, only frameworks and langpacks will be listed but not hotfixes or subcomponents, although they'll get installed and identified by MBSA and win/ms update.
  • Have descriptive filenames specifying target OS version, frameworks versions and languages, except for multilanguage described with -multi suffix for any combination of languages.
  • Work around install error 1935 for 1.1 and 3.0 (last one not documented in the article).
  • Remove lockings avoiding to install directly from 3.5 SP# family .msi files (but don't do it, it's not recommended), thus ADDEPLOY property is no more needed in the install commands (YumeYao's solution). Installer databases (.msi files) are quite self-contained with all fixes (.mst files) preapplied, but still part of the work is done by install scripts outside .msi process.
  • W2K only components are automatically removed from XP/2K3 installers/add-ons, optimizing size (YumeYao's solution).
  • Remove .NET 1.1 and 1.1 langpack (useless) english configuration/wizards items from Administrative Tools menu when langpack is used.
  • As reference, with best compression, without removing subcomponents, and for XP, the complete set of english frameworks+hotfixes installers, extends around 45 MB; and 43 MB merged AIO. And around 47 MB and 45MB AIO respectively, with 1 langpack and hotfixes, depending on language. Slightly higher sizes if packaged into nLite/RVMI add-on(s).

Supported Files List.

YOU DON'T NEED TO DOWNLOAD ALL THIS!. Only .NET managed software requires .NET framework(s), and among these, not every .NET software requires the same .NET #.# version. Having installed 2.0 SP# is mandatory to install 3.0 SP#, and both to install 3.5 SP#. In many cases 2.0 SP# could be enough for the average user (I only use this version), but developers usually updates his software requirements to an upper .NET #.# version; and you can still find applications requiring 1.1 to work, but only a few rare, as many 1.1 applications works on 2.0 too. So all #.# versions are needed to cover all possible scenarios, but it is quite probably you wouldn't need 1.1.

".NET #.# SP#" is not refering to a SP standalone, but to a complete framework version updated to that SP#.

SNMsynth can process 2.0 SP# from individual or from redistributable packet, download one or choose which one to process, through _SNMsynth.ini setting.


  • .NET 1.1 langpacks for 2K/XP installers/add-ons only. For multilanguage installer(s)/add-on(s), add an identifier suffix of your choice to filename to allow multiple 1.1 langpacks in the work folder.
  • .NET 2.0 SP2 langpacks for 2K/XP/2K3 installers/add-ons (eventhough the donwload page states 2K is not supported).
  • .NET 3.5 SP1 redist langpacks (dotnetfx35langpack_x86XX.exe -- note it has the same filename as 3.5 redist langpack), contains 2.0 SP2, 3.0 SP2 and 3.5 SP1 framework langpacks. 3.# framework langpacks are not processed for 2K installers/add-ons.

>>>>> OUTDATED FILES (for the strange case you need them):

Building Process:

  • Preinstalling any 2.0 SP# framework is required to complete process for all packets supported.
  • Defines a target win version for the resultant installer(s)/add-on(s), current host win version by default, applying to the process specific restrictions for this version. Another target than host OS version can be set through _SNMsynth.ini setting.
  • Builds multilingual installers/add-ons for MUI or servers just dropping, in the work folder, the langpacks you need for each framework version.
  • Creates installer(s)/add-on(s) in ..\yourworkfolder\OUT# , incrementing #+1 on each sequential run, not to overwrite successful results of a previous run. Besides it creates a process data file in this folder, including a list of the work folder contents, .ini file settings, and the list of .\TMP folder content after process finish; the goal of this is to check resultant files features or to debug building process.
  • Removes previous .\TMP folder and any spare .\OUT# folders from a previously failed run, at the beginning of the building process.
  • Installers/add-ons compression subprocesses open a separate window to show progress. This subprocesses (only, not the whole building process) can be restarted with the next lower compression ratio available by simply closing this window. Useful in case you overestimated time needed to complete compression at high ratios.


This file includes all settings for SNMsynth.cmd building process and brief explanatory comments.

Default process settings are: to build single framework passive installer(s) with host OS version as target, not removing any subcomponent, applying any hotfix and langpack present in the work folder, and allowing resultant installer/add-on containing .NET 3.5 SP1 (if processed) to keep .NET framework Assistant 1.0 Firefox add-on (and install it by default).

To get other results edit _SNMsynth.ini settings to your linking. It's easy, read comments carefully, and don't forget to match correctly the packets in the work folder with the settings that triggers its processing.

About settings allowing subcomponents removal:

  • DNF20VC8RUNTIME and DNF35VC9RUNTIME settings allow removing outdated Visual C++ runtimes subcomponents from 2.0 SP# and 3.5 SP# frameworks respectively, to install updated ones from external files (see Suppported Files section above). Each updated VC runtime version (8 and/or 9) has to be installed previously to the framework version from which it was removed because they are pre-required. VC9 don't supersede VC8, both are complementary.
  • DNF30RGBRASTERIZER setting allow removing DirectX 9 RGB rasterizer. But there's no updated source to use instead of it, so is not that useful.
  • DNF20OFFICE2K3DEBUGGER setting allow removing outdated office2K3 (office11) crash reporting utilities (debugger) from 2.0 SP# frameworks, this subcomponent is used to update office2K3 debugger, but it is not useful for office2K3 SP3 (or later if any) which include a later version.
  • DNF30WIC setting allow removing outdated Win Imaging Component from 3.0 SP# frameworks. It has to be installed before any 3.0 SP# framework. XP SP3 provides an outdated WIC version.
  • DNF30MSXML6 and DNF30XPS settings allow removing subcomponents pointed by their names. Not so useful because SNMsynth can process their updated versions to build the custom installers/add-ons; unless you want to install them externally. If you remove MSXML6, updated file always must be previously installed to any 3.# SP# framework.
  • DNF35FFXBAPPLUGIN allow removing completely Windows Presentetation Foundation plugin (add-on) for firefox and mozilla browsers. If you keep it, you can still avoid to install it using a switch, see Installing section bellow.
  • DNF35CLICKONCEEXT allow removing completely .NET Assistant Firefox add-on (and the other hidden add-on annexed). If you keep it, you can still avoid to install it using a switch, see Installing section bellow.


  • Install Priorities:
    -- Merged installers keep them, if you merge frameworks AIO into one installer/add-on, you don't have to worry about priorities anymore. Otherwise, you have to manually keep install order for single or partially merged framework installers and T-13/ROE add-ons (though single and partially merged ROE add-ons have a semi-authomatic scheduling mechanism, see bellow).
    -- 2.0 SP# should be installed prior to 3.0 SP#, and these prior to 3.5 SP#.
    -- To install 3.# SP# and 1.1 SP# frameworks without rebooting to install the other, you have to install 1.1 framework last.
    -- For RunOnceEx add-ons, if you don't merge .NET frameworks AIO, SNMsynth ROE add-ons install order is auto-scheduled at integration, making the one containing 1.1 framework to install last at RunOnceEx among the rest of the ROE add-ons present. Also, SNMsynth ROE add-ons group auto-schedule to install prior to the rest of ROE items (not SNMsynth ROE add-ons) allowing .NET software to install from RunOnceEx keeping install priorities; so, for example, you should not use [(1.1 + 2.0) merged ROE add-on + 3.0 ROE add-on] in a win setup because then 3.0 framework install would give an error, as it would auto-schedule to install first and it needs to be installed after 2.0 framework that would install last because it is merged with 1.1 framework.
  • T-13 add-ons, automate SVCPACK.INF method to install built-in SNMsynth installers at T-13. You can use this method manually for SNMsynth installers. Though stated in this guide, you don't need to rename installer(s) to 8.3 format to use them with this method.
    -- The advantage of this method is that you can install .NET software at T-13 (not all software can install at T-13, maybe you should check it before), right after installing frameworks, and this software will pass its parameters to the Default User account.
    -- The downside occurs only to outdated (in the strange case you use it) 3.0 SP1 framework (and eventually 3.5 SP# requiring it), for 3.0 SP2 has been worked around. At T-13, install operations for this version generates errors in Event Viewer for silent installers/add-ons, and error boxes (stopping unattended install) for passive installers/add-ons (see Features section above); these errors also appear later on uninstall. To avoid this 3.0 SP1 install errors use install methods from the next point or use 3.0 SP2.
  • RunOnceEx add-ons automate that install method for nLite/RVMI. As you probably know nLite development has stopped; SNMsynth ROE add-ons are processed correctly, but everytime nLite process any add-on, it always made changes needed for T-13 install. So in case your custom win CD is not going to integrate any other extra T-13 add-on along with your SNMsynth ROE add-on(s), it's better you use RVMI to avoid this behavior. Also you can use SNMsynth installers at this win setup time mark manually with RunOnceEx/RunOnceEx from CD or GUIRunOnce methods or by using RunOnce regkey manually or with nLite RunOnce feature (RunOnce is not exactly the same method as RunOnceEx but it's very close).
  • SNMsynth installers/add-ons containing 3.5 SP# framework keeping WPF mozilla browsers plugin (default), and/or containing 3.5 SP1 framework keeping .NET framework Assistant 1.0 Firefox extension (default) subcomponents, should be installed after Firefox, or, for WPF plugin, after mozilla browsers, for these add-ons to get correctly installed into the browser.
  • You can use switches to modify the installers/add-ons default behavior at run, except if you use the installers with HFSLIP, as it needs switchless installers.
    Switches can modify default behavior of nLite/RVMI add-ons also, through repackaging, thus avoiding to build 2 different add-on(s) sets to be able to run another behavior. To achieve this:
    -- For T-13 add-ons: extract entries_xxxx.ini file, and edit it adding the required switches following the .exe filename, and change verbosity in the decription item; and then replace it in the package. Add-ons supports .cab .zip .7z and .rar formats.
    -- For ROE add-ons: extract file {OSver}DNF{#}.in_ and expand it with expand -r {OSver}DNF{#}.in_ command and open {OSver}DNF{#}.inf with a text editor. Then append the switches you want after the install command under [DNFSetup] section. Then save, execute makecab {OSver}DNF{#}.inf , and use resultant {OSver}DNF{#}.in_ to replace the old one in the add-on.
    Available switches (- or / prefix, insert a space between switches) are:
    -h or -?, to get help. To be used alone.
    -gm1 or -gm2 for showing or hiding, unzip progress bar respectively.
    Following switches have to be placed at the end of the command line, after any other switch above, or installer will malfunction.
    -passive or -quiet for showing or hiding install progress bars respectively.
    -noffxbap avoids to install Windows Presentation Foundation plugin (XBAP) for Firefox and mozilla browsers. This switch is only present on SNMsynth installers/add-ons containing 3.5 SP# framework that keeped this plugin.
    -noffclickonce avoids to install .NET Framework Assistant 1.0 add-on (extension) for Firefox. This switch is present only on SNMsynth installers/add-ons containing 3.5 SP1 framework that keeped this FF extension.


  • Download and extract to the work folder, the packet: 20100118_SNMsynth.zip
  • Download 7-zip stand alone (if the link doesn't work retry until it works) and extract only the file 7za.exe to the work folder.
  • Download the packets you need to build your installer(s)/add-on(s), from supported file list above to the work folder.
  • Open _SNMsynth.ini and configure the building process to your liking, read the notes inside carefully.
  • Run _SNMsynth.cmd.

You got it. :thumbup Enjoy!

Feedback appreciated. If you know new hotfixes or you're getting errors or you're having comments or questions, please let us know.

  • Optionally, you can use Pasha_ZZZ's patch to have coloured output messages from the building process.

Solving Problems (hopufully you won't need this):

  • For debugging:
    -- .\OUT#\PROCESSDATA.TXT file is created on each run with building process data helpful to find problems. If you post asking for help, better you attach it to get faster and accurate solution to your problem.
    -- If that file is not enough, you can create a detailed log file of the building process by executing _SNMsynth -echo >process.log 2>&1
    -- You can also check .NET install logs in %TEMP% folder (DNF*Install.log)
    -- You can use .NET Framework Setup Verification Tool to check .NET frameworks install (but don't expect deep checkings).
  • If you're experiencing problems uninstalling .NET frameworks, not so unusual with .NET (not related with this method), you can use .NET FX Cleanup Tool. Sometimes is needed to run cleanup twice.
  • If you get an anti-virus alert with this stuff, surely (unless any additional problem) it's false positive caused by the UPX compression of the SFX module. UPX uncompressing the sfx module will solve that.
  • This is what I have to say in case you find the following error in the event log:
    .NET Runtime Optimization Service (clr_optimization_v2.0.50727_32) - Service reached limit of transient errors. Will shut down.
  • If you install, 2.0 SP2 framework stand alone over a 2.0 SP1 framework install, no 3.0 nor 3.5 frameworks; the issue described here may appear, and you can work around it as explained by Stebner.
  • You may observer slightly different sizes for outputs obtained in different runs with the same inputs and settings. The origin of these is the admin install creation/patching processes that seems to behave that way, not the 7-zip compression process.



- Fixed couple of minor bugs inserted since 20091224, giving file not found errors, not harming at all, in some cases when restricted hotfixes were used.


- Fixed bug inserted since 20091224, not checking presence of msxml6-KB*-x86.exe files if no msxml6.msi is present, script acted as if any were present.


- Fixed major bug reinserted since 20100101 KB963707 fix, not allowing hotfixes to apply its updated files to 3.5 SP# frameworks.

- Applied BugsBunny's fix for W2K T-13 (and GUI setup in general) OS detection error box bug.

- Fixed minor bugs with a couple error messages, and adapted some error messages to allow direct apply of Pasha_ZZZ's colored output messages _SNMsynth.cmd patch.


- Fixed codepage to neutral for the langpack transforms requiring it, I forgot to change that in the last version changes.


- Fixed bug inserted since 20091216 that may ocassionally be causing you inhability to install at T-13 .NET 3.5 SP# family frameworks and a nonsense error box.

- Fixed bug inserted since 20091231 in .vbs built-in one .mst, causing an 3.0 SP2 langpack install error in event viewer an ocassionally KB951847 appear in the update system.

- Fixed bugs inserted since 20091112 in .vbs built-in some .mst files, that may ocassionally be causing you some error boxes uninstalling langpacks or frameworks.


- Added missing frameworks KB951847 fixes, I only included the langpack fixes in KB951847 fixes packet with the last changes , so KB951847 appeared in the update system.

- Fixed bug applying slimming down fix to the wrong .msi file.


- Added missing KB963707 process message.


- Fixed bug processing KB963707 since last version, exceptionally KB963707 has to be applied (correctly) before slimming.

- Fixed bug not capturing 3.5 SP# hotfixes identifiers for ARP list removal since 20091224, but that's only harming in very few cases.


- Fixed major bug inserted in 20091029 not allowing hotfixes to apply its updated files to your custom installers/addons containing 3.5 SP# framework.

- Fixed bug inserted in 20091029 breaking 3.5 SP# error messages for some languages with codepage different than 1252 (ANSI Latin I).

- Fixed bug inserted in 20091224: error 2727 appeared if you were removing ClickOnce while KB963707 was present, the process tried to update ClickOnce.


- Fixed bug in ClickOnce removal fix file, an XBAP setting was removed unapropriately, also API error appeared when both ClickOnce and XBAP removal were used.

- Fixed minor (not harming) bug, a small script portion was executed when it shouldn't, so "... can not find path..." error appeared.


- Fixed bug processing restricted hotfixes containing KB960043-v4. Code rewritten.

- Fixed bug breaking XBAP switch. Switch simply was not created, incorrect transform filename was used since previous version bug fixing.

- Fixed bug not showing firefox add-ons switches in help box for 3.5 SP1 (keeping that add-ons). Changed their names for accurate description.

- Fixed some minor issues and made some cosmetic changes.


- Fixed bug inserted in last release generating API errors processing 3.5 SP# frameworks and extremely minor bug, 2.0 SP# and 3.0 SP# langpack fixes were uncompressed to TMP folder when they were not used.


- Added option to remove Windows Presentation Foundation plugin (XBAP) for Firefox and mozilla browsers, from 3.5 SP# framework. Also added a switch to avoid install it in case you keep it.

- SNMsynth RunOnceEx add-ons run from CD (or OS image) not copying .inf nor sfx files to HD.

- Other minor changes.


- Replaced current OS version detection method that was causing problems for some non-english target OSs and for OSs with workstation service disabled or removed.

- Applied permanent UPX compression to SFX module as AV false possitives are fixed in the latest databases. (Thx Pasha_ZZZ).


- Fixed 3 missing echo commands and insertion of assemblies compiling command into install scripts, both bugs inserted in the last version with the new changes.


- Fixed some bugs with atomized KB951847FIX. All .vbs scripts checked and enforced against potential errors.

- Fixed bugs with W2K installers building process flow.

- Fixed bug with script setting defaults for avoided settings in .ini file.

- Reg.exe use is replaced with regedit.exe in most of the cases.

- Fixed some minor bugs, applied some cosmetics.

- Added support for building RunOnceEx add-ons for RVMI and nLite, based on user_hidden's solution.

- Added installers help box for -h or -? option.

- Added script -echo option to view building process flow.

- Improved installers/add-ons target OS checking and added error boxes for target mismatch.


- Removed minor bug inserted on 20091029 (sometimes showing an error dialog on uninstall) with 3.0 SP2 language KB951847 FIX portion for all languages, not removing fix regvalue on uninstall in case it is the last langpack to be uninstalled among 3.5 SP1 family langpacks.

- Removed thousand separator from processdata.txt to avoid encoding glitches.


- Fixed uninstall issues. 2 wrong lines replaced.


- Fixed minor bug (not harming at all) putting extra .mst files for a FX version not in process in .\TMP folder.


- Fixed bug with new filenames in T-13 add-ons.


- Added 1.1 and 2.0 hotfixes processing for win2K part, absent in previous version.

- Fixed bug with 1.1 langpack processing inserted in previous version.

- Fixed bug with KB951847 fix not working inserted in previous version.

- Fixed host OS detection bug inserted in previous version.

- Restricted fontcachefix application to 3.0 SP2.

- Removed sensible data from proccess data file.

- Added target OS version for installers/add-ons filenames.

- Compresion subprocess restarting method, now jumps in a loop to highest compression ratio when restarting the lowest ratio setting.

- Strengthened 1.1 hotfixes superseding checkings and feedback.


- All fixes has been atomized to apply only the portion neeeded to its related framework/langpack.

- All temporary files are now created under .\TMP folder to keep better files arrengement.

- All fixes are now pre-applied, so the installer databases are quite selfcontained, avoiding some unusual problems with .mst files not getting copied to installers cache folder.

- Implemented YumeYao's methods for:

· Slimming down 3.5 SP# langpacks.

· W2K only components removal, for upper win versions installer(s)/add-on(s).

· Individually removing Visual C 8 and 9, and Office2K3 debugger subcomponents.

· Updating, XPS with XP or 2K3 KB971276 (or both); and aplying delay to XPS install until 1st logon, to avoid potential install problems during GUI setup. I improved slightly this method.

· -Install from .msi- deadlock removal, allowing to avoid ADDEPLOY property in install command lines.

- Removed renaming of cached installers, no longer necessary.

- Added YumeYao's simplified user_hiddens's KB974417 fix.

- Added support for restricted KB971195 and KB972251.

- Replaced method for checking host OS version on building process (only), with Yzöwl's workstation service based more solid one.

- Switch added to choose to install or not .NET Assistant Firefox add-on from SNMsynth installer(s)/add-on(s) containing 3.5 SP1 framework keeping this add-on (through .ini file setting).

- Installer(s)/add-on(s) compression subprocess(es) now open separate window(s) to show progress and to allow restarting it on the fly (just this subprocess) with the next lower ratio available.

- Fixed bug applying generic langpack fixes on some languages with missmatching codepages.

- Fixed script to avoid potential problems in systems with DIRCMD setting applied, overriding it.

- Added creation of process data file in OUT# subfolder to allow feature checking or debugging for the SNMsynth installer(s)/add-on(s).

- Added option to choose adding UPX compression for .sfx module.

- Fixed bug with faulty install log cretion on %SYSTEMDRIVE% when installing from GUI setup.

- Fixed bug removing 3.0 SP# framework subcomponents entries in add/remove programs for outdated win installer versions.

- Fixed _SNMsynth.ini parsing to adapt it to .ini standard, added 7za.exe version checking and improved checking process, variable depletion and multilanguage support.

- Added .NET icon to installers and some cosmetics.


- Fixed a bug in NETWUFIXES.mst inserted in 20090818, applied fixes not removing correctly on uninstall, probably you unadverted it.

- Fixed a bug not applying transforms since 20090912 in certain circumstances. If you're a brazillian language user you may noticed KB829019 in WU.


- Fixed a bug applying KB963707 inserted in 20090912 SNMsynth version.

- Fixed minor issue causing "File not found" messages when removing unexistent files.


- Work around .NET 3.0 SP2 errors installing at T-13 from SVCPACK or T-13 add-on.

- Fixed and adapted YumeYao's method for slimming 3.5 SP# frameworks.

- Fixed bug removing some 2.0 hotfixes entries under A/R Programs with outdated win installer versions, inserted in 20090826 version.

- Required transform files are now copied to installer folder to be avilable, permissions doesn't allow to copy them to installers cache system folder.

- Added signature header to install scripts.

- Fixed minor issues.


- Fixed buggy 1.1 italian language identifier.


- Fixed some uncommon errors with 1.1, 2.0 and 3.0 hotfixes processing.

- Part of the fix to avoid Firefox add-on install has been included in the transforms to delete it on removal.

- Added removal of pointless "..\Win" folder in 3.5/3.5 SP1 installers/add-ons.

- Now KB963707 is mandatory for 3.5 SP1 installers/add-ons if it install Firefox extension because fixes urgent issues on it

- Replaced hotfixes extraction own method with 7-zip one for faster results.

- Fixed some minor bugs and added some cosmetics.

20090821c & b

- Fixed syntax bugs.


- Fixed hotfix checkings for 2.0 SP2 from redist package and added some cosmetics.


- Fixed bug detecting _SNMsynth.ini OS setting.

- Fixed a couple of syntax bugs and cosmetics.


- Fixed various error 1720 described here.

- Fixed multiple heading line on DNF.reg

- Added support for the latest restricted hotfixes for 2.0 and 3.0

- Added work around for install error 1935.

- Added support to avoid install .NET Assistant Firefox add-on installing 3.5 SP1.

- Fixed bug installing 3.5 SP1 when KB963707 has been applied.

- Added work around to avoid win/ms update pushing KB963707 update in case you don't want it.

- Added new settings and simplified existent ones in _SNMsynth.ini

- Added install log creation under %TEMP% folder.

- Added some cosmetics.


- Removed unneeded line.


- Applied fix for win/ms update to stop prompting KB829019 PT-BR (pointless 2.0 SP0 langpack) when the right upper version is installed.

- Merged all win/ms update fixes applied by this method in .mst file to allow automatic removing on uninstall, even for the cached msi itself.

- Added support for integrating multiple langpacks for each framework version.

- Added support for the installers/add-ons to work with win installer 2.0, for 2K non updated machines, removing cancel button for passive dialog boxes.

- Removed .exe embedded in .mst file causing AVG and eSafe false positives. It'll no longer use .exe files.

- Removed pointless modify and repair buttons under Add/Remove Programs for 2.0 SP# and 3.0 SP#.

- Precompiling assemblies is now done 1 time at the end in merged installers, for robustness of the install process.

- Fixed bug removing 3.5 SP# unused installer locale files, when path contains spaces.

- Fixed win version detection, to allow running the building process from not supported as target, host win versions.

- Added a variable emptying section to allow running the script repeatedly from the same terminal without errors.

- Fixed a bug in one warning message for 2.0 SP2 and added external MSXML process control message.

- Added some code cosmetics.


- Fixed some syntax bugs and some lines in wrong place.


- Fixed win/ms update prompting to install KB928416 (pointless 3.0 SP0 langpack) when 3.0 SP#>=1 and its langpack are installed.

- Added support to avoid process KB958481, KB958483 and KB958484 when its related framework is being processed, not applying then KB951847 fix.

- Fixed cosmetic issue.


- Fixed bug framewok versions using KB951847_FIX.mst not finding .msi file on uninstall in some scenarios.


- Fixed a bug processing 1.1 hotfixes.

- Fixed cosmetic issue with 7za.exe absence error message.


- Added support for 2.0 SP2 framework and 2.0 SP2 framework langpack single packets.

- Added support for restricted hotfixes.

- Added a transform to avoid win/ms update (high priority) 3.5/3.5 SP1 frameworks Family Update KB951847, only for the updated last framework versions.

- Improved support for building installer(s)/add-on(s) for a different win version than current.

- Removed duplicate DNF.reg import command from the install script.

- Removed unused locale files from 3.5 SP# pool.

- Fixed bug determining win version for 2K3.

- Fixed 1.1 italian-hungarian language mismatch bug.

- Fixed installed 1.1 hotfixes not hiding bug, when coming from a merged installer/add-on integrating only 1.1.

- Fixed some cosmetic issues.

- Updated 7-zip SFX modified module to 1.2.6 version, UPX compressed.


- Added support to build nlite add-ons.

- Added changes to set all process settings from SNMsynth.ini

- Simplified MERGE_FRAMEWORKS setting.

- Fixed minor issue on absence of specific 1.1 updates.


- Added switchable installers building.

- Added support to install at T-13.

- Added assemblies precompiling at the end of the install process.

- Added UPX compression of 7-zip modified module.

- Added removal of FILEVER.VBS at the end of building process.

- Fixed full merged installer filename.

- Fixed minor cosmetic issues.


- Fixed warning generation on NDP30SP2-KB958483-x86.exe and NDP35SP1-KB958484-x86.exe absence, when appropriate.

- Added comment in a line of _SNMsynth.ini that should have been commented.


- First SNMsynth version forked from SNM.

Edited by strel

Share this post

Link to post
Share on other sites

I've made a minimum change in SNMsynth_loud, to simplify the process a bit more, results are equal.


Share this post

Link to post
Share on other sites

Im assuming that this thread has replaced the other one m8? (SNM_mod8.cmd and associated files) Will get the new stuff for sure, thanks buddy!



Note to moderators - any chance this could be made a sticky guys its like one of the most important topics in here? Just a thought :D

Edited by Stoner81

Share this post

Link to post
Share on other sites

Thank you for this new script with support for NDP20SP1-KB947748. I appreciate it very much.

Also, my thanks and appreciation to Tomcat76 for the original script.

My first impression is, that the new script works perfectly with windows 2000. I used the non-loud version to prepare a merged installer for .NET 1.1 and 2.0 SP1 and all the associated hotfixes. Although I have not yet had the opportunity to use the installer with HFSLIP to perform a complete fresh system installation, I did try it out on an already existing installation: I first fully uninstalled all .NET software and then re-installed it using the installer. Both MBSA and Windows Update were happy with the result, and I saw no issue with the installer.


Share this post

Link to post
Share on other sites

Thanks for your hard work. It's so excellent and it's such helpful for an unattended windows installation.


Share this post

Link to post
Share on other sites

Hi, this is my first post here, as I'm one-day old in the nLite world. I've successfully merged .NET 1.1, 2.0, 3.0, 3.5 English versions. Install is pending though.

I am interested to add language packs for Spanish and Chinese (Simplified) as the computer this is for might be used by Chinese & Spanish users. The script would only let me have ONE langpack pero dotnet installation, so I had to rename the Spanish ones.

Questions are:

1: do I really need all three languages (EN, ES, CH)? (sorry, probably off-topic here)

2: if so, how can I have all the remaining one installed?

Thanks in advance.



Share this post

Link to post
Share on other sites


As far as I know you can't do that.

WXP/2K3 includes in their respective MUI CDs .NET translation packages as stated by MS, not the case for 2K. I've never tried MUI but probably only covers .NET versions included natively with the related windows version, I'm not sure.

Other people ask me to include multilanguage capacity to the script for using it with MUI, so I understand MUI uses installed .NET langpacks, contrary to what I though, since multimple .NET langpacks can be installed on a windows, but I couldn't find this around described clearly enough. Maybe someone using MUI can help.

Anyway, for this and other reasons, the script now includes multilanguage capacity.

Que vaya bien.

Edited by strel

Share this post

Link to post
Share on other sites

I create a FULL dotNet with your package and I have installed an virtual OS XP in Vmware.

After all I dont have access to internet from OS virtual.

Using the TOMCAT package all is ok and internet access is normal.

Any more have this problem?



Share this post

Link to post
Share on other sites

2 0d14r3

I can't reproduce your results:

I built full merged installer including .NET frameworks 1.1, 2.0 SP2, 3.0 SP2 and 3.5 SP1, plus all its hotfixes for XP, NDP1.1sp1-KB867460-X86.exe, NDP1.1sp1-KB928366-X86.exe, NDP20SP2-KB958481-x86.exe, NDP30SP2-KB958483-x86.exe and NDP35SP1-KB958484-x86.exe in english version.

I built an unattended XP SP3 set installing this full merged hotfixed english .NET installer from RunOnceEx.

I installed this set first in MS Virtual PC 2007, and then in VMware 6.0 workstation.

In both cases I had access to internet.

This is what I expected since SNMsynth doesn't change the basis of the building process of Tomcat' script. Have you installed it before GUI-mode setup ends? It should be installed on first logon. Did you find any .NET related errors in event viewer?

2 All

I've updated the scripts, with minor changes. See Changelog.

Edited by strel

Share this post

Link to post
Share on other sites

Before you modified them strel Ive had no problems at all m8!!! awesome work, I will get the new modded script (see post 9) and make them again and report back for you m8 give you some feedback for you.



Share this post

Link to post
Share on other sites

@ strel

I use RunOnceEX to install the full package with langpacks brazilian.

I try again and back to report.




Share this post

Link to post
Share on other sites

:D Great piece of work !!!

I wonder what to do with the ini-file.

It keeps asking me to choose which version of 2.0 I want.

Do I need to add NO instead of Yes to the original one or the one that comes with 3.5?

And if so do I need to do the same a bit lower for the language files?

I would like a separate file for 1.1+2.0 and for the rest (3.5).

I set MERGE to 12. Which of the 2.0 do I have to say YES to then.

What is the difference between loud and silent installation?

BTW: I am green as grass here, a total newbee :w00t:

Attempt 1:

I choose NO for the 2.0 both with file as with the lang pack.


It worked and finished, but it says the 7z file in OUT is not a 7-zip file. It is only 91,5 kB!.

Attempt 2:Now I choose below settings. Also for the language. MERGE still at 12. Same result. A 91,5 kB .exe file. That of course does not work. PLEASE HELP!






Attempt 3:

Everything at YES, only the file NetFx20SP1_x86nl.exe deleted form the work folder. Same result as attempt 1.

Attempt 4:

I will set the COMPRESSION RATIO at LOW. Until now it was MED.

Now I can see Temp.7z growing. I must say I had no look at in during the first 3 attempts.


Now I have a 41,5Mb .exe file. that works.

Set the compression rate at LOW !!

Still 1 open question: it is not possible to have also a package for the rest? That is everything but 1.1+2.0SP2.

Or since 1.1 is the one that rewuires a reboot, is it possible to have 2.0 and all up to 3.5SP1 in 1 package and 1.1. in another?

That way 2.0+3.5 can be installed during an unattended set up of Windows.

Now I am going to test the FULL package.

Which works fine.

And to my own question: just play around with 12 FULL and YES and NO and you can combine what you want.

Question closed.

Edited by jweetje

Share this post

Link to post
Share on other sites

You see the script supports the processing of different packets with different versions of 2.0 built-in. The script is set for you to chose only one packet source to process 2.0. What source? the one you need based on the version of 2.0 you want, for example, if you want the more updated version of 2.0 for win2K3, then you need .NET 3.5 SP1 redistributable packet with 2.0 SP2 built-in and set the PROCESS_DNF35_DNF2=yes in the .ini file, but if at the same time NetFx20SP1_x86.exe is present in the work folder and PROCESS_DNF2=YES in the .ini file, you'll get an error.

To disable a setting in the .ini file you can empty the value or add whatever you want, it only recognize "yes", case insensitive, as working value, read notes inside .ini file.

About languages, to process the language for some framework version, you have to process it from the langpack related to the packet from which this framework version proceeds, even though the language for this version is contained too in another langpack. In the .ini file, settings to process languages only works if the correponding langpack is present in the work folder (obviously), and the framework related is being processed. So no crossed source packets of languages and frameworks are allowed to be processed, unlike Tomcat' original script, as notes inside .ini file states. Again, read it.

Differences among flavours are obvious, as described in the guide. The silent installers are absolutely silent, if you use this silent installers over and installed windows, you'll need to open Task Manager to monitor the unzipping and installing processes or you may not notice it; while loud installers shows progress bar boxes for unzipping and installing processes.

You have to match packets present in the work folder, with the setting that triggers the processing of a framework built-in it, to feed the process with a specified framework, see notes inside .ini file.

You can merge 1.1 with the 2.0 SP# you want, the process is a lot flexible. You can even use MERGE_FRAMEWORKS=fuLL to do this, not feeding the process with 3.0 and 3.5 versions. If you want 1.1 and 2.0 merged, and 3.0 and 3.5 in single installers or merged apart, you have to run the process, at least, 2 times. If you didn't feed the process with 2.0 but only with 1.1 and its langpack and set MERGE_FRAMEWORKS=12 you should get DNF11xx.EXE. If you want to merge 3.0 and 3.5, set MERGE_FRAMEWORKS=fUll and feed the process only with 3.0 and 3.5, do it disabling PROCESS_DNF35_DNF2 as dotnetfx35.exe (containing 2.0 SP#) needs to be processed. You can merge all frameworks in one installer.

You can use all resultant installers during unattended setup or over an installed windows.

Edited by strel

Share this post

Link to post
Share on other sites

One of the most useful scripts I've ever found.

Apart from custom editing the 7zip SFX program. :D

And, I like how you changed the program to say when it's processing different sections of the .NET 3.5 SP1 Installer.

Works like a charm.

One thing in the topic though, to someone who was just trying this, they might be confuzzled by the fact that you linked to the .NET 3.5 and the SP1 separately and download them both. That would be a huge waste of bandwidth. Just figured I'd point that out... that along with the .NET 2 Installer. I think you should remove it because they're all included in the 3.5 SP1. You might want to put something explaining that too...

Oh, I second that this topic should be pinned.


One problem, and extremely minor.

A file was created and not deleted: FILEVER.VBS

In the root.

Edited by Belak51

Share this post

Link to post
Share on other sites

Strel, THANKS.

Thorough and supportive.

I have used it and it works great. Saves a lot of space.

Next attempt: get all that 64 bit stuff out of the files. Saves a lot of Mb's.

Enjoy this evening and a Happy 2009 to you.


Share this post

Link to post
Share on other sites


My excuses!!!

Your package dont have problems. My problem are random access to Internet from Vmware using dial-up connection.

Thanks for all.



Share this post

Link to post
Share on other sites


It seems to me, that .NET 3.0 SP2 Language Pack integration is corrupted.

Microsoft Update Website does not see it installed.

However i see it installed in "add or remove programs",

but the install size is only 3 Mbytes.

Now i tried a fresh install in VMware, with original .NETs,

and 3.0 SP2 Language pack's size is 10 MBytes in "add or remove programs"!

So i think the script is missing something.

(i used hungarian language pack)

Edited by fenyo

Share this post

Link to post
Share on other sites

This script looks great, aldo i am not sure i understand it completely.

I dl'ed the 7zip stuff, and also all 3.5 net framework files (including language and hotfix).

Changed nothing in the (loud) script to and run it. Now i have three files in the OUT1 folder:




Do you need all three of them for a fully working Net framework envirement ?


Share this post

Link to post
Share on other sites

2 Belak51

I'll review all this in the next update, soon. About 2.0, I suppose you're meaning removing 2.0 SP1 packet, I can't, it's needed for win2K. 3.5 redistributable and 3.5 langpack (not SP1) are better candidates for removing.


2 jweetje

64 bit stuff is removed from the installers.

Thx 2 U, happy 2009.

2 0d14r3

I supposed it.

Thx 2 U.

2 fenyo

I got the same results. But, what do you exactly mean when you say Microsoft Update don't recognize it, does it offer to you 3.5 SP1 langpack for downloading? This is not my case.

I don't know why this happens. All I can say is I don't see errors installing, and checking the building process, it ends up without errors, apparently. I'll keep searching.


2 Jediron

Depends on the software you run. .NET is only for software that is made for using this frameworks ("managed code" in MS jargon). Not all software use .NET and not all software that use .NET, use the same #.# version. Maybe the software you use, needs only 2.0, but for ongoing updates of that software, the developer may update the code to a later .NET version. For example, paint .NET have changed its framework needs from 2.0 to 3.5 in recent versions. Up to you.


Edited by strel

Share this post

Link to post
Share on other sites

fenyo, I found differences in installers including 3.0 SP2 magyar language, with installers in other languages (specifically with spanish and danish with which I compared). When processing magyar language these 4 files doesn't exist in the installers:



this files exist in other languages, in its correponding folders (...\040E\... , the name of this folder depends on language used); and



exceding 9 MB each one.

Edited by strel

Share this post

Link to post
Share on other sites
2 fenyo

I got the same results. But, what do you exactly mean when you say Microsoft Update don't recognize it, does it offer to you 3.5 SP1 langpack for downloading?

No! It offers me to download 3.0 SP2 Language Pack.

3.5, 2.0, 1.1 are all OK.

I've just noticed, that MU site offers it again with "original" 3.0 SP2 Language Pack installed. [link]

So i think it's a Microsoft Update bug. (it wouldn't be the first time)

You might build a workaround for this. :)

BTW i don't understand why the "original" Langpack 3-times bigger (as installed) than the script made one.


Share this post

Link to post
Share on other sites
fenyo, I found differences in installers including 3.0 SP2 magyar language, with installers in other languages (specifically with spanish and danish with which I compared). When processing magyar language this 2 files, both beyond 9 MB, are not incorporated to the installers:




So actually just the hungarian version is corrupted.



I haven't find any of these files in any of the directories. (i've extracted all DNFx.EXE the script made)

Which original-installer contains these files?


Ok, i've found similar files:



The last character differs.

But these files are not in LNG.

Edited by fenyo

Share this post

Link to post
Share on other sites

These files you point are not in question, they are present in spanish and danish versions too. The problem is with that I told you. You can find them in administrative installs of 3.5 SP1 langpack except for magyar.

Edited by strel

Share this post

Link to post
Share on other sites
These files you point are not in question, they are present in spanish and danish versions too. The problem is with that I told you. You can find them in administrative installs of 3.5 SP1 langpack except for magyar. But you probably may find it if you install langpack normally in your HD.

Ouh. So these files are not corrupted, they're missing.

And you're tellin' me these files are not language-neutral?

Is there any chance that THIS contains these files?

Blaaah... I can't make an administrative install of these installer (to see if it contains the files)

...switches, switches........

Edited by fenyo

Share this post

Link to post
Share on other sites

I think these files are contained in the langpack for 3.5 SP1, but for some reason not extracted in the administrative install (which is the one used by this script). The update for 3.0 SP1 langpack is not for this version.


Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.