United States*
Microsoft.com Home|Site Map
Microsoft*
Search Microsoft.com for:
Help and Support 
|Select a Product|Search Knowledge Base

Description of flyweight patching in Microsoft Windows Installer 3.0

Article ID:894439
Last Review:March 29, 2005
Revision:1.0
Important This article contains information about modifying the registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, click the following article number to view the article in the Microsoft Knowledge Base:
256986 (http://support.microsoft.com/kb/256986/) Description of the Microsoft Windows Registry
On This Page

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.

Describe 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.

Run 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.


Understand 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.

Author 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:
1.Click Start, click Run, type regedit, and then click OK.
2.Locate and then click the following key in the registry:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
3.On the Edit menu, point to New, and then click DWORD.
4.Type DisableFlyWeightPatching, and then press ENTER.
5.On the Edit menu, click Modify.
6.Type 1, and then click OK.

REFERENCES

For more information about Windows Installer 3.0, visit the following Microsoft Developer Network (MSDN) Web sites:

What's new in Windows Installer version 3.0
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/what_s_new_in_windows_installer_version_3_0.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/what_s_new_in_windows_installer_version_3_0.asp)
DisableFlyWeightPatching
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/disableflyweightpatching.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/disableflyweightpatching.asp)
Patch optimization
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/patch_optimization.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/patch_optimization.asp)
Windows Installer 3.0 is available
http://go.microsoft.com/fwlink/?LinkId=33342 (http://go.microsoft.com/fwlink/?LinkId=33342)

APPLIES TO
Microsoft Windows Installer 3.0
Keywords: 
kbhowto kbhowtomaster kbinfo KB894439

Search Support(KB)

 
Switch to Advanced Search

Article Translations

 

Other Support Options

Contact Microsoft
Phone Numbers, Support Options and Pricing, Online Help, and more.
Customer Service
For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
Newsgroups
Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.

© 2006 Microsoft Corporation. All rights reserved. Terms of Use |Trademarks |Privacy Statement