I like to suggest a new method for calculating superseded updates. It offers two improvements over the existing solution:
- Superseded updates are downloaded again, if their superseding updates are excluded from download.
- A list of excluded UpdateIds is generated from a list of excluded kb numbers.
Handling of superseding and superseded updates
With the existing method, superseding updates are always treated as "superseding", even if they are excluded from download. Superseded updates are never downloaded automatically, but must be added to the file ExcludeList-superseded-exclude.txt instead.
But superseding updates, which are excluded from download, can not possibly replace other downloads. Superseded updates should be recovered and downloaded again, if their superseding update is excluded from download.
This is actually an old problem for users, who still need updates for Windows XP: There are still new updates for the embedded Windows XP POSReady 2009. These updates can't be used for regular versions like Windows XP Professional. Still, the new updates supersede older updates, which are not downloaded anymore. Existing downloads may even get deleted, although they are still needed for Windows XP Home Edition or Windows XP Professional.
This problem becomes more evident with the update rollups for Windows 7. Here the monthly "quality update rollup" supersedes the "security-only update rollup", although both are released on the same day. The quality update can be excluded from download, but then the security-only update is still excluded as well, since it is still treated as a superseded update.
The new method addresses this problem like this:
- It starts with a initial black list, which is created from the files:
- Code: Select all
These files should contain kb numbers only.
- The excluded kb numbers are traced back to the FileIds.
- The excluded FileIds are traced back to the parent bundle RevisionIds.
- The excluded bundle RevisionIds are traced back to the corresponding UpdateIds. The excluded UpdateIds are exported to a file
- Code: Select all
- The excluded bundle RevisionIds are removed from the list of all existing bundle RevisionIds.
- The calculation of superseded updates then proceeds as depicted in viewtopic.php?f=5&t=5676 .
Handling of UpdateIds
- Code: Select all
If a superseding update is hidden, then the superseded updates will be requested for installation instead. For Windows 7 the security-only update rollups would be installed in place of the full quality update rollup.
With the current implementation, the full quality update rollups for Windows 7 are installed by default. It takes up to four steps to install the security-only update rollups instead, either on the server ( viewtopic.php?f=2&t=6072#p20850 ) or by local customization of the settings files ( viewtopic.php?f=2&t=6072&start=10#p21004 ).
The new implementation should make the handling of the Windows 7 update rollups somewhat easier:
- The file
- Code: Select all
- Superseded updates are automatically recovered, if superseding updates are excluded. It should not be necessary anymore to add these updates to the file ExcludeList-superseded-exclude.txt. For Windows 7, the security-only update rollups are downloaded in place of the full quality update rollup.
- Excluded UpdateIds could be automatically hidden from installation (but this must be implemented first).
- Superseded Updates are automatically installed if their superseding update is hidden. This is built-in to the Windows Update client and does not need any changes to the installation script.
For testing, I added the kb numbers of the October and November Quality Update Rollups for Windows 7 to the file ..\exclude\custom\ExcludeListForce-all.txt:
- Code: Select all
Then nine new updates were downloaded for w61-x86, including the security-only updates for October and November:
- Code: Select all
28.11.2016 13:22:33,08 - Info: Determined superseded updates
28.11.2016 13:22:33,33 - Info: Determined static update urls for w61 glb
28.11.2016 13:23:43,93 - Info: Determined dynamic update urls for w61 glb
28.11.2016 13:23:49,75 - Info: Downloaded/validated 21 statically defined updates for w61 glb
2016-11-28 13:23:52 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2013/10/windows6.1-kb2868626-x86_dcac1e43ba19ba91f11cd942bc92b67176e280a2.cab [1201507/1201507] -> "../client/w61/glb/windows6.1-kb2868626-x86_dcac1e43ba19ba91f11cd942bc92b67176e280a2.cab" 
2016-11-28 13:24:26 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2016/02/windows6.1-kb3138962-x86_0388f60701e2570c67647bc972590cbe33c8ade4.cab [12201082/12201082] -> "../client/w61/glb/windows6.1-kb3138962-x86_0388f60701e2570c67647bc972590cbe33c8ade4.cab" 
2016-11-28 13:26:28 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2016/11/windows6.1-kb3197867-x86_af2d630018e9f8d8ec83855346ad4c1880de3614.cab [54992714/54992714] -> "../client/w61/glb/windows6.1-kb3197867-x86_af2d630018e9f8d8ec83855346ad4c1880de3614.cab" 
2016-11-28 13:26:31 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2014/10/windows6.1-kb3005607-x86_a4cc4f93b27ede3bfdbbe428cb3466ab1f652ce8.cab [867435/867435] -> "../client/w61/glb/windows6.1-kb3005607-x86_a4cc4f93b27ede3bfdbbe428cb3466ab1f652ce8.cab" 
2016-11-28 13:27:28 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/02/windows6.1-kb3033929-x86_9943ff29461e03a10af55ccd007f9803e0dd3d0e.cab [27555763/27555763] -> "../client/w61/glb/windows6.1-kb3033929-x86_9943ff29461e03a10af55ccd007f9803e0dd3d0e.cab" 
2016-11-28 13:27:29 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/07/windows6.1-kb3076949-x86_04780a3bd2d40a15a1a97b331c61f6017c49c8bf.cab [180211/180211] -> "../client/w61/glb/windows6.1-kb3076949-x86_04780a3bd2d40a15a1a97b331c61f6017c49c8bf.cab" 
2016-11-28 13:27:36 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/06/windows6.1-kb3168965-x86_4827033eef3d7657177ef99c0ebaaa3138893a51.cab [2271891/2271891] -> "../client/w61/glb/windows6.1-kb3168965-x86_4827033eef3d7657177ef99c0ebaaa3138893a51.cab" 
2016-11-28 13:28:54 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/10/windows6.1-kb3192391-x86_eb57ab91f0f988e87e34e06f2f5f4a92181daef9.cab [47098272/47098272] -> "../client/w61/glb/windows6.1-kb3192391-x86_eb57ab91f0f988e87e34e06f2f5f4a92181daef9.cab" 
2016-11-28 13:28:57 URL:http://download.windowsupdate.com/msdownload/update/software/secu/2011/05/windows6.1-kb2544893-x86_fe24e7c2caae32c3a4b8dca345291fa3e5dbc492.cab [423175/423175] -> "../client/w61/glb/windows6.1-kb2544893-x86_fe24e7c2caae32c3a4b8dca345291fa3e5dbc492.cab" 
28.11.2016 13:29:00,25 - Info: Downloaded/validated 197 dynamically determined updates for w61 glb
28.11.2016 13:29:00,29 - Info: Deleted ..\client\w61\glb\windows6.1-kb3197868-x86_8ebbf64ca6b6ab58cc27be618e7b31168d5346ca.cab
28.11.2016 13:29:16,14 - Info: Cleaned up client directory for w61 glb
For w61-x64, there were 11 new updates:
- Code: Select all
28.11.2016 14:04:40,64 - Info: Determined superseded updates
28.11.2016 14:04:40,87 - Info: Determined static update urls for w61-x64 glb
28.11.2016 14:05:53,60 - Info: Determined dynamic update urls for w61-x64 glb
28.11.2016 14:06:00,47 - Info: Downloaded/validated 22 statically defined updates for w61-x64 glb
2016-11-28 14:06:06 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2013/10/windows6.1-kb2868626-x64_3b34d4c8e2c29a394ad3c536549347c37adfa734.cab [2037431/2037431] -> "../client/w61-x64/glb/windows6.1-kb2868626-x64_3b34d4c8e2c29a394ad3c536549347c37adfa734.cab" 
2016-11-28 14:07:28 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2015/02/windows6.1-kb3033929-x64_5b2988b4619138769d347e12aec350c2cf4db4cd.cab [45796115/45796115] -> "../client/w61-x64/glb/windows6.1-kb3033929-x64_5b2988b4619138769d347e12aec350c2cf4db4cd.cab" 
2016-11-28 14:07:58 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2016/02/windows6.1-kb3138962-x64_ffeef5bfb9d8cef2870d3d6874ef5ffcd7416222.cab [16265332/16265332] -> "../client/w61-x64/glb/windows6.1-kb3138962-x64_ffeef5bfb9d8cef2870d3d6874ef5ffcd7416222.cab" 
2016-11-28 14:10:40 URL:http://download.windowsupdate.com/c/msdownload/update/software/secu/2016/11/windows6.1-kb3197867-x64_8979d5bdbbd52b9dc1ad5dd644442092975fbf41.cab [92295089/92295089] -> "../client/w61-x64/glb/windows6.1-kb3197867-x64_8979d5bdbbd52b9dc1ad5dd644442092975fbf41.cab" 
2016-11-28 14:10:45 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2014/10/windows6.1-kb3005607-x64_cd3779850521fa10a0a8b72890aad4840af70dd3.cab [1363923/1363923] -> "../client/w61-x64/glb/windows6.1-kb3005607-x64_cd3779850521fa10a0a8b72890aad4840af70dd3.cab" 
2016-11-28 14:10:47 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/07/windows6.1-kb3076949-x64_0a58cffb033470caf3115e3719344ec6eb90c62a.cab [373231/373231] -> "../client/w61-x64/glb/windows6.1-kb3076949-x64_0a58cffb033470caf3115e3719344ec6eb90c62a.cab" 
2016-11-28 14:10:54 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/06/windows6.1-kb3168965-x64_decc33513703e6ba86db76c095a16e774bad6abd.cab [2644101/2644101] -> "../client/w61-x64/glb/windows6.1-kb3168965-x64_decc33513703e6ba86db76c095a16e774bad6abd.cab" 
2016-11-28 14:13:30 URL:http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/10/windows6.1-kb3192391-x64_46ff895c96395a951e39305e226694d0702d6a76.cab [82989243/82989243] -> "../client/w61-x64/glb/windows6.1-kb3192391-x64_46ff895c96395a951e39305e226694d0702d6a76.cab" 
2016-11-28 14:13:34 URL:http://download.windowsupdate.com/msdownload/update/software/secu/2011/05/windows6.1-kb2544893-x64_21bb7cf8af8571e12267e165c4687429dc966544.cab [850170/850170] -> "../client/w61-x64/glb/windows6.1-kb2544893-x64_21bb7cf8af8571e12267e165c4687429dc966544.cab" 
2016-11-28 14:13:41 URL:http://download.windowsupdate.com/msdownload/update/software/secu/2011/11/windows6.1-kb2631813-x64_626b002a3957fdf3e7512331efa1a8987519f6db.cab [1818135/1818135] -> "../client/w61-x64/glb/windows6.1-kb2631813-x64_626b002a3957fdf3e7512331efa1a8987519f6db.cab" 
28.11.2016 14:13:45,09 - Info: Downloaded/validated 211 dynamically determined updates for w61-x64 glb
28.11.2016 14:13:45,18 - Info: Deleted ..\client\w61-x64\glb\windows6.1-kb3197868-x64_86e84bd3e458a2e1c7c7d20e0732880af9d4e8c8.cab
28.11.2016 14:14:02,18 - Info: Cleaned up client directory for w61-x64 glb
This implies, that the full quality update rollup supersedes more updates than just the corresponding security-only updates.
The correct handling of superseding and superseded updates is a general problem. Then it is a simplification, to start with the file ExcludeListForce-all.txt and only two kb numbers. But for development, it is easier to start with a limited test case. If it works well, then the other exclude lists for Windows, Office and .Net should be added to the initial black list.