INTRODUCTION
Microsoft Windows Installer 3.0 offers
performance optimization that is also known as flyweight patching. The purpose of flyweight
patching is to enable faster updating for applications by removing execution of
unnecessary actions. For example, flyweight patching mode is primarily designed for
updates that only update some files or some registry values. Windows Installer
3.0 analyzes the update for specific changes to determine whether optimization is
possible. If optimization is
possible, the update is applied by using a minimal processing set.
back to the
topDescribe flyweight patching optimization
An update is only eligible for flyweight patching optimization if the changes
that are made by the applicable transform set in the update are made to the following
tables:
- AdminExecuteSequence
- AdminUISequence
- Condition
- CustomAction
- File
- FileSFPCatalog
- InstallExecuteSequence
- InstallUISequence
- Media
- MoveFile
- MsiDigitalCertificate
- MsiDigitalSignature
- MsiFileHash
- MsiPatchHeaders
- Patch
- PatchPackage
- Property
- Registry
- SFPCatalog
- TypeLib
- Validation
When an update meets this criteria, the following message
is logged in the log file:
Windows Installer will attempt
to optimize this patch to the fullest!
If the update makes a
modification to another table, another Component table, or another Class table, the update
is not eligible for flyweight patching optimization. When a modification to another
table occurs, the following message is logged in the log file:
Windows
Installer is disabling patch optimizations for this install
transaction.
Flyweight patching optimization is disabled if any one
of the updates that is recently enabled for the installation transaction is
ineligible for flyweight patching optimization. Additionally, Windows Installer 3.0
automatically disables flyweight patching optimization when any one of the following
conditions is true:
- An application is installed for the first time.
- The REINSTALLMODE property is set to a in the REINSTALLMODE_FILEREPLACE mode.
- The update application affects run-from-source features.
- One of the newly applied updates is a major upgrade. This is an update that changes the ProductCode property.
When flyweight patching optimization is disabled, one of the following messages is logged in the log file:
Message 1
Turning off patch optimization.
Patching affects run-from-source features.
Message 2
Disabling patch optimizations since
major upgrade patch '{1BFBBCA7-3F15-16E8-016B-D3F9B331810A}' is activated for
application.
Note You may receive a message in the log file that states that
performance optimization is enabled. Later, you may receive a subsequent message in the log file that states that
performance optimization is disabled.
back to the topRun standard conditional actions
When you enable flyweight patching mode, only the following minimal set of
standard conditional actions run:
- AllocateRegistrySpace
- AppSearch
- CostFinalize
- CostInitialize
- DeleteServices
- DisableRollback
- DuplicateFiles
- ExecuteAction
- FileCost
- FindRelatedProducts
- ForceReboot
- INSTALL
- InstallAdminPackage
- InstallExecute
- InstallExecuteAgain
- InstallFiles
- InstallFinalize
- InstallInitialize
- InstallODBC
- InstallServices
- InstallValidate
- IsolateComponents
- LaunchConditions
- MsiPublishAssemblies
- MsiUnpublishAssemblies
- PatchFiles
- PublishProduct
- RegisterComPlus
- RegisterFonts
- RegisterProduct
- RegisterTypeLibraries
- RemoveDuplicateFiles
- RemoveODBC
- ResolveSource
- ScheduleReboot
- SelfRegModules
- SelfUnregModules
- SetODBCFolders
- StartServices
- StopServices
- UnregisterComPlus
- UnregisterFonts
- UnregisterTypeLibraries
- ValidateProductID
- WriteRegistryValues
Additional flyweight patching optimizations are included in the
WriteRegistryValues
registry entry. During flyweight patching optimization, only certain registry entries are processed. The registry entries that are processed are those registry entries that are updated by the update. The detection is
based on actual modifications that are made to the Registry table. When registry entries are
skipped because of flyweight patching optimization mode, the following message is logged in the log file:
Action "ProcessComponents" is optimized
out.
back to the
topUnderstand possible compatibility issues
Flyweight patching optimization can cause possible compatibility issues
for an update. The compatibility issues can occur if the update triggers additional installation processing or if the update requires additional installation processing outside
the changes that are indicated in the applicable transform set for the update. The possible
compatibility issues follow:
- The update installation triggers re-evaluation of a
transitive component.
If the update is detected as flyweight, the transitive
component is not correctly handled. The scenario includes a transitive
component that moves from the disabled state to the enabled state and vice versa. - The update installation tries to install a currently
absent feature or a currently
absent component.
If the component includes
global assemblies, the update application can actually fail when flyweight patching optimization mode
is enabled. - The update indirectly alters a registry entry by changing a
property value that is referenced in the Registry table.
For example, if the registry
value is based on the value of the MyCustomProperty property that is authored as
"[MyCustomProperty]," and the update changes the value of "[MyCustomProperty]," the registry entry
is not updated. This issue occurs because the registry entry does not appear in the
modifications list.
back to the
topAuthor your update to prevent flyweight patching optimization
Warning If you use Registry Editor incorrectly, you may cause serious
problems that may require you to reinstall your operating system. Microsoft
cannot guarantee that you can solve problems that result from using Registry
Editor incorrectly. Use Registry Editor at your own
risk.
The easiest way that you can author your updates to prevent
flyweight patching optimization is to add a new custom table with a new row in the .msp file.
The presence of the new custom table with the new row prevents
flyweight patching mode. For example, add a new table that is named
"CustomDisableflyweight" in the upgrade package that is used to build the update.
Author your update so that the table only has one column. This one column also serves as
the primary key column. Now, add a new row to the table when you want to
disable flyweight patching for that update.
Additionally, system
administrators can
disable flyweight patching optimization for all updates by setting the
DisableflyweightPatching
subkey in the registry DWORD value to 1.
This action resolves application compatibility issues.
Follow these steps, and then quit Registry Editor:
- Click Start, click Run,
type regedit, and then click OK.
- Locate and then click the following key in the registry:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
- On the Edit menu, point to
New, and then click DWORD.
- Type DisableFlyWeightPatching, and
then press ENTER.
- On the Edit menu, click
Modify.
- Type 1, and then click
OK.
back to the
top