Friday, 3 August 2012
Miscellaneous ICEs - MSI Validation
ICE07 checks that all fonts are being installed into the Fonts folder on the user’s computer.
ICE15 verifies the necessary reciprocal relationship between the MIME table
and the Extension table. Every entry in the MIME table must refer to an entry in the Extension table in its Extension_ column. The referenced entry in the Extension table must refer back to that same entry in the MIME table through its MIME_ column.
ICE25 checks merge module dependencies. It checks to be sure that all of the
merge modules listed in the ModuleDependency table are present, and that none of the merge modules listed in the ModuleExclusion table are present.
ICE29 verifies that all stream names within the Installer package are unique,
even after possible name truncation (the Installer stores a maximum of 62 characters for a stream name).
ICE36 checks the database for “icon bloat”—that is, for icons that are stored in the database but that are never used anywhere during the installation. If this ICE detects unused icons, you should remove them to shrink your Installer package.
ICE39 validates the Summary Information Stream in the database. It checks to make sure that all of the required properties are present in the stream, and that they have the appropriate data types.
ICE40 does three miscellaneous validations:
• It checks to be sure an Error table is present in the database.
• It checks the Property table to make sure you have not defined a property
• It checks the RemoveIniFile table to be sure that any Delete Tag entries specify the tag to delete.
ICE41 checks the Class and Extension tables to make sure that they do not conflict with the FeatureComponent table. The Class and Extension tables specify the Component and Feature for each row, and this information must match the associations between components and features in the FeatureComponent table.
ICE43 validates that non-advertised shortcuts refer to components that use a
Registry entry in HKEY_CURRENT_USER as their key path.
ICE45 compares Bit Field columns to the bit fields that are defined for the current release of the Installer. It makes sure that none of the bits that are currently reserved is set to 1. It performs this check in these tables:
ICE48 looks at the Directory table, checking for paths that are hard-coded to
local drives (for example, c:\Temp). Such paths can cause problems because the target machine won’t necessarily have such a path available. This is not a fatal error, because in some cases (for example, when installing to computers where you control the directory structure) this may be acceptable.
ICE50 warns you if you have an icon stored in files that do not have the extension .exe or .ico. Such icons won’t be correctly displayed by Windows. It also warns you if you have an icon for a shortcut that does not have the same extension as the target for that shortcut, because this would cause the shortcut to have an incorrect context menu.
ICE51 checks for problems with font titles. Fonts stored in ttf or ttc files (True- Type fonts) should have a null value in the FontTitle column of the Font table, because these fonts have a name embedded directly in the font file. Fonts stored in other types of files (such as fon files) should have an entry in the FontTitle column of the Font table, because these fonts do not contain embedded names.
ICE55 validates that all files and other objects referenced in the LockObject column of the LockPermissions table actually exist in the installation.
ICE56 checks the Directory table for several possible problems:
• There should be a single root directory.
• The root directory should be the TARGETDIR property.
• The SourceDir property should occur in the DefaultDir column.
ICE58 checks to make sure there are not too many entries in the Media table.
The Media table is limited to 80 rows.
ICE59 verifies that advertised shortcuts belong to components that are installed by the target feature of the shortcut. If this ICE fails, then advertised shortcuts will not function properly. Instead, they will launch the Installer to install the necessary component, but because the component isn’t associated with the feature that the shortcut calls the Installer will be unable to locate it.
ICE61 inspects the Upgrade table to make sure that upgrades will not try to
remove themselves or perform other illegal operations.
ICE62 checks the IsolatedComponent table for entries that might cause unexpected behavior. For example, it will detect isolated-shared components that are not properly set up for refcounting.
ICE64 checks for directory entries that will not be properly removed if an application is uninstalled.
ICE65 validates the format of entries in the Environment table.
ICE66 checks the database version (contained in the PageCount property of the Summary Information Stream) to make sure that it does not conflict with other information in the database. For example, the Upgrade table is processed by the version 1.1 Installer but not the version 1.0 Installer, and so should not occur in version 1.0 Installer databases.
ICE67 checks that the target of a non-advertised shortcut belongs to the same
component as the shortcut itself.
ICE71 validates that the Media table contains a row where the DiskID column
has a value of 1. This entry is necessary because the Installer itself always assumes that the .msi package is on disk 1.
ICE73 checks the product code, package code, and upgrade code in your
Installer database to make sure that these codes do not match any of those used in the Windows Installer samples. Copying the samples without changing the codes they contain is a common mistake, but breaks the rule that Installer packages should not reuse product, package, or upgrade codes from another product.