ICE03 Validation Error

ICE03 Validation Error

Summary

Discussion on causes and resolution of ICE03 validation errors

Symptoms

ICE03 Invalid file name or Invalid DefaultDir validation errors are reported during MSI validation. These errors are reported on the File and Directory tables, respectively. Here are some examples of ICE03 error messages that may occur:
  • ICE03 - Error - Invalid identifier; Table: File, Column: File, Key(s): Test.pdf
  • ICE03 - ICE03 - Error - Invalid identifier; Table: MsiFileHash, Column: File_, Key(s): Test.pdf
  • ICE03 Failure ICE Internal Error 1149. API Returned: 1615.
  • ICE03 Failure Error 2228: C:\apps\Test\Product1\Release1\DiskImages\Disk1\Integration Test.msi, _FtrRef, SELECT 'Table', Column' FROM _FtrRef" WHERE 'Table' = 'File' AND 'Column' = 'File'

Cause

These errors may occur if the _Validation table has been manually edited or a third-party merge module has been included into a project. If merge modules are being used in your project, the merge modules should be validated independently to ensure that each passes validation.
ICE03 does not occur under normal circumstances while using InstallShield. InstallShield prevents invalid data from being entered into the development environment. This prevents ICE03 from occurring in most cases. If ICE03 does occur, match the message with one of the causes listed below.

Resolution

A value in a MSI table exceeds the MaxValue as defined in the _Validation table or a value in a MSI table is smaller than the MinValue as defined in the _Validation table.
In the example below, there is a sample entry from both the TypeLib table and the _Validation table. The value in the version column of the TypeLib table entry exceeds the value found in the MaxValue column of the _Validation table ( 100 > 80 ). Note: Not all columns are displayed in the TypeLib or _Validation table below.

Table: TypeLib

LibIDLanguageComponent_Version
{C9FCC3A5-FBF1-11D6-AA40-005056C00001}0Component1100

Table: _Validation

TableColumnNullableMinValueMaxValue
TypeLibVersionY080

The value for the table in question must be changed to a value that falls within the Min/Max Value limits. If the value cannot be changed, the Max or Min Value must be changed accordingly in the _Validation table itself via the Direct Editor. See the Additional Information section of this article for information on how to access the _Validation table.

A value in a MSI table is not listed in the Set column of the _Validation table.
In the example below, there is a sample entry from both the LockPermissions table and the _Validation table. The value in the table column of the LockPermissions table entry is invalid because it does not match one of the values specified in the Set column of the _Validation table entry. In this example, permissions are to be set on an entry in the IniFile table. This cannot currently be done. According to the MSI Help Library, permissions can only be set on entries in the CreateFolder, Registry, or File table. The Set column of the _Validation table entry only allows for CreateFolder, File, and Registry to populated into the Table column of the LockPermissions table. Note: Not all columns are displayed in the LockPermissions and _Validation tables below.

Table: LockPermissions

LockObjectTableDomainUser
IniFile1IniFile TestUser

Table: _Validation

TableColumnSetMinValueMaxValue
LockPermissionsTableCreateFolder;File;Registry101650

The field in question can be manually adjusted via the Direct Editor in the InstallShield IDE to match the Set column in the _Validation table. In the example above, the value of the Table column in the LockPermissions table must be changed to match a value currently in the Set column of the _Validation table. If the _Validation table must be accessed to verify valid values, see the Additional Information section of this article for information on how to access the _Validation table.

A value has been incorrectly defined according to the data type for that column in the MSI table.
Data types use specific formatting rules that cannot be broken. The field in question can be manually edited via the Direct Editor in the IDE. The invalid value must be replaced with a valid value according to the definition of the data type for that column.

Below is a list of data types that may trigger ICE03.

Data TypeExampleMSI Help Library Topic
VersionThe Version column of the File tableVersion
UpperCaseNAUpperCase
GUIDThe ComponentID column of the Component tableGUID
IdentifierDirectory column of the Component tableIdentifier
LanguageLanguage column of the File tableLanguage and Language Identifiers
FileNameFileName column of the File tableFileName
PathNAPath
PathsPath column of the BindImage tablePaths
AnyPathPath column of the DrLocator tableAnyPath
FormattedValue column of the Registry tableFormatted
TemplateMessage column of the Error tableTemplate
DefaultDirDefaultDir column of the Directory tableDefaultDir
RegPathKey column of the RegLocator tableRegPath
PropertySource column of the Media tableProperty
ConditionCondition column of the Component tableCondition
CustomSourceSource column of the Custom Action tableCustomSource
ShortcutTarget column of the Shortcut tableShortcut
CabinetCabinet column of the Media tableCabinet

There are columns listed in the database that are not listed in the Column column of the _Validation table or vice versa.
The database and validation tables do not match.

The database and validation tables must be authored to match. Either a row must be deleted from the _Validation table or a row must be added to the _Validation table. A row must be available in the _Validation table for each column available for the table in question. Refer to the table below for an illustration. Note: Not all columns are displayed in the TypeLib or _Validation table below.

A row must be available for each column of the TypeLib Table. As an illustration, there is a row for the Version column in the _Validation table. This is indicated by the Column column of the table. There must be a similar row available for every column of the TypeLib table. The next row's Column column may have the value of Language to indicate that the row is for the Language column of the TypeLib table.

Table: TypeLib

LibIDLanguageComponent_Version
{C9FCC3A5-FBF1-11D6-AA40-005056C00001}0Component1100

Table: _Validation

TableColumnNullableMinValueMaxValue
TypeLibVersionY080


Validation does not recognize the Category string used for this particular column in the _ Validation table.

The data type in the _Validation table?s Category column must be modified to a valid data type. For a list of valid data types, see the MSI Help Library topic "Column Data Types."

The KeyTable column in the _Validation table references a table that does not exist in the database.

The value in the KeyTable column of the _Validation table must be changed to an existing MSI table name.

The value in the MinValue column of the _validation table is greater than the value in the MaxValue column.

The MaxValue column in the_Validation table must be set to a value greater than the MinValue column. See Causes 1 and 2 for sample _Validation tables displaying the MaxValue and MinValue columns.

This indicates that one of the MSI table's columns exceeds the length of the column width specified by the column definition. For example, if a large number of languages have been specified for a DLL in the Languages column of the File table for that DLL, this may trigger an ICE03 warning. To avoid the warning in this specific case, you would either need to reduce the number of languages associated with the file or change the database schema.

For a solution to this error, see MSI Help Library topic "Column Definition Format."


Primary key columns cannot be localized.

The Primary key columns in the _Validation table must be set to non-localized values. The primary key of a table is the key that makes the table unique. The primary key can be determined by looking up the table in the MSI Help Library. A Y will be under the Key column indicating which of a table's values serves as the key. For example, the File column is the key of the File table. For more information on localization, see the MSI Help Library topic "Localizing a Windows Installer Package."

Unknown Error
There is no known solution to this validation error.

Machine the MSI package was built on has the NtfsDisable8dot3NameCreation option enabled
These types of ICE03 validation errors can occur if the machine the MSI package was built on has the NtfsDisable8dot3NameCreation option enabled in the registry. This setting causes Windows to never generate 8.3 style file or directory names. As a result, the Filename values populated in the File table and the DefaultDir values populated in the Directory table only contain long file or folder names. These names are invalid if their names are longer than 8 characters, their extensions are longer than 3 characters, or spaces are contained in the name.
This issue can be resolved (for table entries related to the registry value) by removing the NtfsDisable8dot3NameCreation value or setting it to 0. The value is located in the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem key.

After removing or setting the value to 0, rebuild the project (note that if files or folders were added to the project with
the registry option enabled, the files or folders may need to be removed and re-added to the project). These validation errors can be worked around by manually correcting the table entries in the File and Directory tables. For example, if an ICE03 invalid file name error is reported on the following Filename column value in the File table: This is a long filename.txt . Change the Filename column value to the following: THISIS~1.txt|This is a long filename.txt

Additional Information

  • The _Validation table is a self-referential check to ensure data values are within typical ranges. Some setups have files that lie outside this range. In these cases, the _Validation table needs to be modified as necessary.

  • When validating the MSI tables and fields causing validation errors are highlighted in red, which helps to distinguish which field needs to be adjusted.

  • The _Validation table is not exposed via the Direct Editor. Follow these steps to open the built MSI file in Direct Edit mode to expose the _Validation table:

    1. Open your project in the InstallShield.

    2. From the Tools menu, choose Open Release Folder. This opens your Disk1 folder in Windows Explorer.

    3. There should be an .msi file in the Disk1 folder. If you do not see this file, you need to create an uncompressed build with the Release Wizard. To do this:

      1. Right-click your release in the Releases view and choose Release Wizard.

      2. Step through the wizard until you get to the Release Configuration panel and choose to keep files uncompressed.

    4. Once the .msi file is exposed in the Disk1 folder, close your current project.

    5. Right-click the .msi file in your Disk1 folder and choose Edit with InstallShield Developer (or Edit with InstallShield DevStudio, or Edit with InstallShield). This opens the .msi file in Direct Edit mode.

  • The IDE provides a Generate GUID button that automatically generates a New valid GUID for pieces of the installation that require a GUID. For example, in the case of the component, you can go to the Components section of the IDE and select the Component Code Property of the component. A Generate GUID button is available in the lower right corner. Pressing this button generates a New GUID for that component.
More information can be found in the following articles and KB articles below:

Related KB Articles

Q112045 BUG: ICE03 Validation Error When Installing to Directory Named with Multiple Periods
Was this article helpful? Yes No
No ratings
Version history
Last update:
‎Dec 26, 2007 07:54 PM
Updated by: