Internal Consistency Evaluators (ICE) Reference

September 24, 2009 - Windows Installer

Internal Consistency Evaluators

Internal consistency evaluators also called ICE’s are custom actions written in VBScript, JScript or as a DLL or EXE. When these custom actions are executed, they scan the database for entries in database records that are valid when examined individually but that may cause incorrect behavior in the context of the whole database.Watch Full Movie Online Streaming Online and Download

On basic level ICE01 to 105 are a set of predefined rules created by Microsoft to confirm the contents, logic and structure of Windows Installer package (MSI).

The table below also includes the recent additions ICE101 to ICE105 which were introduced with Windows Installer 5.0

ICE Reference Table

ICE Description
ICE01 Simple test of ICE mechanism.
ICE02 Circular reference test for File-Component, Registry-Component KeyPaths.
ICE03 Basic data and foreign key validation.
ICE04 Validates file sequence numbers against the LastSequence numbers of the Media Table.
ICE05 Validates for “required” entries in particular tables.
ICE06 Validates for missing column or tables in the database. Any column defined in the _Validation table must be found in the database.
ICE07 Validates that fonts are installed to the FontsFolder.
ICE08 Checks for duplicate GUIDs in the ComponentId column of the Component table.
ICE09 Validates that the permanent bit is set for every component marked for installation into the SystemFolder.
ICE10 Ensures that advertise feature states among children and parents are compatible.
ICE12 Validates type 35 and type 51 custom actions and their locations in the sequence tables.
ICE13 Validates that dialogs are not listed as actions in the execute sequence tables. Dialog actions are only allowed in the user interface sequence tables.
ICE14 Validates that feature parents do not have the msidbFeatureAttributesFollowParent bit set. Also validates that the entries in the Feature and Feature_Parent columns are not the same in the same record.
ICE15 Validates that a circular reference exists between every entry in the MIME table and the corresponding extension in the Extension table.
ICE16 Validates that the ProductName in the Property table is not greater than 63 characters in length.
ICE17 Validates control type dependencies in the Control table. Covers PushButtons, RadioButtonGroups, ListBoxes, ListViews, and ComboBoxes.
ICE18 Validates the KeyPath column of the Component table when it is null. In this case, the key path is a Directory.
ICE19 Validates the advertising tables: Class, TypeLib, Extension, PublishComponents, and Shortcut.
ICE20 Validates that the required dialogs are in the Dialog table.
ICE21 Validates that all components in the Component table map to a feature in the FeatureComponents table.
ICE22 Validates that the Feature_ and Component_ columns in the PublishComponent table.
ICE23 Validates the tab order of controls in all dialog boxes.
ICE24 Validates certain properties in the Property table.
ICE25 Verifies merge module dependencies and merge module exclusions.
ICE26 Validates required and prohibited actions in the sequence tables.
ICE27 Validates the organization and order of the sequence tables.
ICE28 Validates actions that must not be separated by ForceReboot.
ICE29 Validates that your stream names remain unique if truncated to the 62-character limit.
ICE30 Validates that the installation of components containing the same file never install the file more than one time in the same directory.
ICE31 Validates the text styles listed in the Text column of the control table.
ICE32 Compares the column definitions to validate that keys and foreign keys are of the same size and type.
ICE33 Checks the registry table for entries that belong in other tables.
ICE34 Validates that every group of radio buttons has a default.
ICE35 Validates that any files from a cabinet file cannot be set to run from the source.
ICE36 Validates that icons listed in the Icon table are used in the Class, ProgID, or Shortcut tables.
ICE38 Validates that components installed under the user’s profile use a registry key under HKCU as their key path.
ICE39 Validates the Summary Information stream of the database.
ICE40 Performs various miscellaneous checks.
ICE41 Validates that entries in the Extension and Class tables refer to components belonging to the referenced feature.
ICE42 Checks that Class table entries do not have .exe files set as InProc values, and that only LocalServer contexts have arguments and DefInProc values.
ICE43 Checks that non-advertised shortcuts are in components with HKCU registry keys as the key paths.
ICE44 Checks that dialog events in the ControlEvent table (NewDialog, SpawnDialog, SpawnWaitDialog) reference valid Dialogs in the Dialog table.
ICE45 Checks for reserved bits that are set.
ICE46 Checks for custom properties that only differ from defined properties by their case.
ICE47 Checks for features with more than 1600 components per feature..
ICE48 Checks for directories that are hard-coded to local paths.
ICE49 Checks for non-REG_SZ default values in the registry table.
ICE50 Checks that advertised shortcuts have correct icons and context menus.
ICE51 Checks that TTC/TTF fonts do not have titles, but that all other fonts do.
ICE52 Checks for non-public properties in the AppSearch table.
ICE53 Checks for registry entries that write private installer information or policy values.
ICE54 Checks for components using companion files as their key path file.
ICE55 Checks that LockPermission objects exist and have valid permissions.
ICE56 Validates that the directory structure of the .msi file has a single valid root.
ICE57 Validates that individual components do not mix per-machine and per-user data.
ICE58 Checks that your
Media Table does not have more than 80 rows.
ICE59 Checks that advertised shortcuts belong to components that are installed by the target feature of the shortcut.
ICE60 Checks that if a file in the
File Table is not a font and has a version, then it also has a language.
ICE61 Checks the
Upgrade Table.
ICE62 Performs extensive checks on the
IsolatedComponent Table for data that may cause unexpected behavior.
ICE63 Checks for proper sequencing of the RemoveExistingProducts action.
ICE64 Checks that new directories in the user profile are removed in roaming scenarios.
ICE65 Checks that the
Environment Table does not have invalid prefix or append values.
ICE66 Uses the tables in the database to determine which schema your database should use.
ICE67 Checks that the target of a non-advertised shortcut belongs to the same component as the shortcut itself, or that the attributes of the target component ensure that it does not change installation locations.
ICE68 Checks that all custom action types needed for an installation are valid.
ICE69 Checks that all substrings of the form [$componentkey] within a Formatted string do not cross-reference components.
ICE70 Verifies that integer values for registry entries are specified correctly.
ICE71 Verifies that the
Media Table contains an entry with DiskId equal to 1.
ICE72 Ensures that the only custom actions used in the
AdvtExecuteSequence Table are type 19, type 35, and type 51 custom actions.
ICE73 Verifies that your package does not reuse package codes or product codes of the Windows Installer SDK samples. For more information, see
Package Codes and
Product Codes.
ICE74 Verifies that the
FASTOEM property has not been authored into the
Property Table.
ICE75 Verifies that all custom action types that use an installed file as their source are sequenced after the
CostFinalize Action.
ICE76 Verifies that no files in the
BindImage Table reference SFP (WFP) catalogs.
ICE77 Verifies that in-script custom actions are sequenced after the
InstallInitialize Action and before the
InstallFinalize Action.
ICE78 Verifies that the
AdvtUISequence Table either does not exist or is empty.
ICE79 Validates references to components and features entered in the database fields using the
Condition data type.
ICE80 Validates that
Template Summary Property and
Page Count Summary Property correctly specify the presence of 64-bit components or custom action scripts.
ICE81 Validates the
MsiDigitalCertificate Table, MsiDigitalSignature Table and MsiPackageCertificate Table.
ICE82 Validates the
InstallExecuteSequence Table.
ICE83 Validates the
MsiAssembly Table.
ICE84 Checks the sequence tables to verify that required
Standard Actions are not set with conditions.
ICE85 Validates that the SourceName column of the
MoveFile Table is a valid long file name.
ICE86 Issues a warning if the package uses the
AdminUser property in database column of the
Condition type.
ICE87 Validates that the following properties have not been authored in the
Property Table.
ICE88 Validates the DirProperty column of
IniFile Table.
ICE89 Validates that the value in the Progid_Parent column in
ProgId Table is a valid foreign key into the ProgId column in ProgId table.
ICE90 Posts a warning if it finds that a shortcut’s directory has been specified as a public property.
ICE91 Posts a warning if a file, .ini file, or shortcut file is installed into a per-user profile directory that does not vary based on the
ALLUSERS property.
ICE92 Verifies that a component without a Component Id GUID is not also specified as a permanent component. Verifies that no component has both the msidbComponentAttributesPermanent and msidbComponentAttributesUninstallOnSupersedence attributes.
ICE93 Issues a warning if a custom action uses the same name as a standard action.
ICE94 Issues a warning if there are any unadvertised shortcuts pointing to an assembly file in the global assembly cache.
ICE95 Checks the
Control Table and
BBControl Table to verify that the billboard controls fit onto all the billboards.
ICE96 Verifies that the
PublishFeatures Action and the
PublishProduct Action are entered in the
AdvtExecuteSequence Table.
ICE97 Verifies that two components do not isolate a shared component to the same directory.
ICE98 Verifies the description field of the ODBCDataSource Table for an ODBC data source.
ICE99 Verifies that no property name entered in the Directory table duplicates a name reserved for the public or private use of the Windows Installer.
ICE100 Checks the authoring of the MsiEmbeddedUI and MsiEmbeddedChainer tables.
ICE101 Checks that no value in the Feature column of the Feature table exceeds a maximum length of 38 characters.
ICE102 Validates the MsiServiceConfig and MsiServiceConfigFailureActions tables.
ICE103 Validates the MsiPrint and MsiLaunchApp control events.
ICE104 Verifies the MsiLockPermissionsEx and LockPermissions tables.
ICE105 Validates that the package has been authored to be installed in a per-user context.

MSDN – Package Validation

Leave a Reply