Showing posts with label solve msi ice errors. Show all posts
Showing posts with label solve msi ice errors. Show all posts
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
named REINSTALLMODE.
• 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:
• BBControl
• Control
• Dialog
• Feature
• File
• MoveFile
• ODBCDataSource
• Patch
• RemoveFile
• ServiceControl
• ServiceInstall
• TextStyle
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.
Dialog ICEs - MSI Validation
ICE17 checks for some common problems with the Control table, including the
following:
• PushButton controls without entries in the Event table
• Bitmap or Icon controls without entries in the Binary table
• RadioButtonGroup, ListBox, ComboBox, or ListView controls without
entries in the corresponding tables
ICE20 verifies that required dialogs are present and that they have the required controls. For example, there must be a FilesInUse dialog box and it must have a Listbox control and three PushButton controls with specific properties set.
ICE23 checks that the tab order is correct for every dialog. That is, it makes sure that there is a Control_First control specified for every dialog, and that the Control_Next properties for each dialog form a single closed loop.
ICE31 validates that any text styles used in the Control table are actually defined in the TextStyle table.
ICE34 checks for inconsistencies in the RadioButton table and the corresponding RadioButtonGroup controls. For example, it makes sure that the default value of the control is one of the values listed in the RadioButton table.
ICE44 checks the NewDialog, SpawnDialog and SpawnWaitDialog rows in the
ControlEvent table to be sure that these rows reference dialogs that actually exist in the Dialog table.
Property ICEs - MSI Validation
ICE05 checks to make sure that required properties, including ProductName, ProductLanguage, ProductVersion, ProductCode, and Manufacturer, are present in the database.
ICE16 checks the length of the ProductName property to make sure it does not
exceed the maximum allowed 63 characters.
ICE24 checks the data types of the ProductCode, ProductVersion, and Product-
Language properties.
ICE46 looks at the database for properties that differ only in case (for example, “MyProperty” and “myProperty”). Because the Installer is case-sensitive, such properties are treated as two distinct properties. This is usually not what the developer intended. If you really did want to have separate MyProperty and myProperty properties, you can ignore the warnings from this ICE.
ICE52 checks for private properties in the AppSearch table. All properties in the AppSearch table must be public properties (that is, their names must be entirely upper case).
ICE69 inspects strings of the Formatted data type, looking for [$componentkey] substrings. These substrings must refer to the same component that is referenced in the Component column of the table being inspected.
Action ICEs - MSI Validation
ICE12 is used to validate that type 35 and type 51 custom actions are properly positioned with respect to the CostFinalize action in any sequence tables. Type 35 custom actions must come after the CostFinalize action, and type 51 custom actions must come before the CostFinalize action.
ICE13 checks for dialogs in the Execute Sequence tables. Dialogs can only
appear in the UI Sequence tables.
ICE26 checks the Sequence tables to make sure that all of the required actions are present. It also makes sure that no Sequence table contains an action that is disallowed for that table.
ICE27 verifies that every entry in every Sequence table is either a standard
action, a custom action, or a Dialog name. It also checks the organization of each Sequence table to be sure that actions are being performed in the proper order.
ICE28 looks at ForceReboot actions, and makes sure that they are not being
called in inappropriate places.
ICE63 checks the sequencing of the RemoveExistingProducts action. This action may be placed in several spots in the Sequence tables, but there are other spots where it is invalid.
ICE68 checks the Type column in the CustomAction table. Only some numbers
are valid custom action types. For example, a value of 82 in this column (which is not a valid custom action type) would generate an error from this ICE.
ICE72 checks the AdvtExecuteSequence table to make sure than any custom
actions it contains are type 19, 35, or 51. If this table contains other types of custom actions, advertisement may fail.
Monday, 29 August 2011
ICE Errors Reference
The following list provides links to each individual ICE. These ICEs are used to validate installation packages.
ICE | Brief description of ICE |
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 Media table's LastSequence numbers. |
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. |
ICE11 | ICE11 validates the Source column of the Custom Action table for Nested Installation custom actions. The Source column must contain a valid GUID (MSI product code). |
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 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 installs the file more than once in the same directory. |
ICE31 | Validates the text styles listed in the Text column of the control table. |
ICE32 | Compares the column definitions to validates that keys and foreign keys are of the same size and type. |
ICE33 | Checks for entries in the registry table 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 source |
ICE36 | Validates that icons listed in the Icon table are used 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 don't have EXEs set as InProc, and that only LocalServer contexts have arguments and DefInProc values. |
ICE43 | Checks that non-advertised shortcuts are in components with HKCU reg 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 on Windows NT/Windows 2000 and more than 800 components per feature on Windows 95 and Windows 98. |
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 | ICE71 verifies that the Media table contains an entry with DiskId equal to 1. |
ICE72 | ICE72 ensures that the only custom actions used in the AdvtExecuteSequence table are type 19, type 35, and type 51 custom actions |
ICE73 | ICE73 verifies that your package does not reuse package codes or product codes of the Windows Installer SDK samples. See Package Codes and Product Codes. |
ICE74 | ICE74 verifies that the FASTOEM property has not been authored into the Property Table. |
ICE75 | ICE75 verifies that all custom action types that use an installed file as their source are sequenced after the CostFinalize action. |
ICE76 | ICE76 verifies that no files in the BindImage table reference SFP (WFP) catalogs. |
ICE77 | ICE77 verifies that in-script custom actions are sequenced after the InstallInitialize action and before the InstallFinalize action. |
ICE78 | ICE78 verifies that that the AdvtUISequence table either does not exist or is empty. |
ICE79 | ICE79 validates references to components and features entered in the database fields using the Condition data type. |
ICE80 | 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 and MsiDigitalSignature table. |
ICE82 | Validates the InstallExecuteSequence table. |
ICE83 | Validates the MsiAssembly table. |
ICE84 | Checks the sequence tables to verify that required standard actions have not been 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. |
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. |
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. |
Subscribe to:
Posts (Atom)