Windows Installer
 
Unrestricted access to Windows Installer functionality!
 
Open Source
 
Open source!
 

<xml/>

 
Plain XML based source scripts!
 
Free
 
Free, no strings attached!
 
Build Automation
 
Command-line interface for automated application build process!
 
Community
 
Thriving community support!
Why WiX?
ICE03

What does ICE03 check?

ICE03 checks the data types and foreign keys based on the _Validation table and the database tables in the .msi file. The _Validation table is a system table that contains the column names and the data types for all of the tables in the database. It is used during the database validation process to ensure that all columns are accounted for and have the correct values.

When does ICE03 show up?

ICE03 typically posts an error if a data value is not permitted based on the data type and table information stored in _Validation Table.

Brief descriptions of the ICE03 errors are listed below:
Duplicate Primary Key
The primary keys of a new row duplicates the primary keys of an existing row. The Nullable column of the _Validation table shows the primary keys in the database.

Not A Nullable Column
A table column that is not specified as nullable in the Nullable column of the _Validation table contains an entry that is Null.

Not A Valid Foreign Key
A column that is a foreign key into a second table contains an entry that does not exist in the primary key of the second table.

Value exceeds MaxValue
The numeric value of an entry in a database table exceeds the maximum limit specified for this field in the MaxValue column of the _Validation table.

Value below MinValue
The numeric value of an entry in a database table is less than the minimum limit specified for this field in the MinValue column of the _Validation table.

Value not a member of the set
The value of an entry in a database table is not a member of the acceptable set of values specified for this field in the Set column of the _Validation table.

Invalid version string
Version number is not an acceptable value. The Version data type is a text string containing a valid version string. A version string has the format xxxxx.xxxxx.xxxxx.xxxxx where x is a digit.

All UPPER case required
Lowercase values are not allowed. The UpperCase data type is a text string that must be all uppercase.

Invalid GUID string
Globally Unique Identifier used is not an acceptable value. The valid format for a GUID is {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} where X is a hex digit (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Note that utilities such as GUIDGEN can generate GUIDs containing lowercase letters. These must all be changed to uppercase letters before the GUID can be used by the installer as a valid product code, package code, or component code.

Invalid file name/usage of wildcards
The database contains an invalid file name or an incorrect wildcard. The WildCardFilename data type is a Filename that may also contain the wild card characters "?" for any single character or "*" for zero or more occurrences of any character. The Filename data type is a text string containing a file name or folder. By default, the file name is assumed to use short file name syntax; that is, eight-character name, period (.), and 3-character extension. To include a long file name with the short file name, separate it from the short file name with a vertical bar (|).
Short and long file names must not contain the following characters:
\   ?   |   >  <   :  /  *  "
In addition, short file names must not contain the following characters:
+  ,  ;  =  [  ]
No space is allowed preceding the vertical bar (|) separator for the short file name/long file name syntax. Short file names may not include a space, although a long file name may. A space can exist after the separator only if the long file name of the file name begins with the space. No full-path syntax is allowed.

Invalid identifier
The Identifier data type is a text string. Identifiers may contain the ASCII characters A-Z (a-z), digits, underscores (_), or periods (.). However, every identifier must begin with either a letter or an underscore.

Invalid Language Id
The database contains an invalid numeric Language Identifier (LANGID). The Language data type is a text string containing one or more valid numeric language IDs. If there are two or more language IDs, they must be separated by commas.
See the platform SDK for a current list of Language Identifiers used by Windows. For example, 1033 for the U.S. and 0 for language neutral.

Invalid Filename
The Filename data type is a text string containing a file name or folder. By default, the file name is assumed to use short file name syntax; that is, eight-character name, period (.), and 3-character extension. To include a long file name with the short file name, separate it from the short file name with a vertical bar (|).
Short and long file names must not contain the following characters:
\   ?   |   >  <   :  /  *  "
In addition, short file names must not contain the following characters:
+  ,  ;  =  [  ]
No space is allowed preceding the vertical bar (|) separator for the short file name/long file name syntax. Short file names may not include a space, although a long file name may. A space can exist after the separator only if the long file name of the file name begins with the space. No full-path syntax is allowed.

Invalid full path
Only Path, AnyPath, and Paths data types are allowed. The Path data type is a text string containing a valid full path. The string may also contain a property name enclosed in square brackets [ ]. In such a case, the name of the property, including the brackets, is replaced in the string by the value of the property. The AnyPath data type is a text string containing either a full path or a relative path. When specifying a relative path, you can include a long file name with the short file name by separating the short and long names with a vertical bar (|). Note that you cannot specify multiple levels of a directory or fully qualified paths in this way. The path may contain properties enclosed within square brackets ([ ]). The Paths data type is a text string containing a list of Path data types, separated by semicolons (;).

Bad conditional string
The database contains an invalid conditional string. This is a text string that must evaluate to TRUE or FALSE according to the Conditional Statement Syntax.

Invalid format string
Only Formatted data type is allowed.

The Formatted data type is a text string that is processed to resolve embedded property names, table keys, environment variable references, and other special substrings. The following conventions are recognized to resolve the string

  • Square brackets ([ ]) or curly braces ({ }) with no matching pair are left in the text.
  •  If a substring of the form [propertyname] is encountered, it is replaced by the value of the property. If propertyname is not a valid property name, then the substring resolves as blank.
  • The square brackets may be iterated and the property names are resolved from inside out.
  • If a substring of the form [%environmentvariable] is found, the value of the environment variable is substituted for the substring. 
  • If a substring of the form [\x] is found, it is replaced by the character x , where x is one character, without any further processing. Only the first character after the backslash is kept; everything else is removed. 
  • If a substring is enclosed in curly braces ({ }), and it contains no property names enclosed in square brackets ([ ]), the substring is left unchanged, including the curly braces.
  • If a substring is enclosed in curly braces ({ }) and it contains one or more property names enclosed in square brackets ([ ]) then, if all the property names are valid, the text (with the resolved substitutions) is displayed without the curly braces. 
  • If a substring of the form [~] is found, it is replaced with the null character. This is used to author REG_MULTI_SZ character strings in the Registry table. Note that [~] is also used to append or prefix values to environment variables using the Environment table. 
  • If a substring of the form [#filekey] is found, it is replaced by the full path of the file, with the value filekey used as a key into the File table. The value of [#filekey] remains blank and is not replaced by a path until the installer runs the CostInitialize action, FileCost action, and CostFinalize action. The value of [#filekey] depends upon the installation state of the component to which the file belongs. If the component is run from the source, the value is the path to the source location of the file. If the component is run locally, the value is the path to the target location of the file after installation. If the component has an action state of absent, the installed state of the component is used to determine the [#filekey] value. If the installed state of the component is also absent or null, [#filekey] resolves to an empty string, otherwise it resolves to the value based upon the component's installed state. For more information about checking the installation state of components, see Checking the Installation of Features, Components, Files.
  • If a substring of the form [$componentkey] is found, it is replaced by the install directory of the component, with the value componentkey used as a key into the Component table. The value of [$componentkey] remains blank and is not replaced by a directory until the installer runs the CostInitialize action, FileCost action, and CostFinalize action. The value of [$componentkey] depends upon the installation state of the component and where it occurs. In the Value column of the Registry Table, this substring may refer to the action state or the requested action state of the component. In all other cases, this substring refers to the action state of the component. For example, if the component is run from the source, the value is the source directory of the file. If the component is run locally, the value is the target directory after installation. If the component is absent, the value is left blank. Windows Installer tracks both the action and requested installation states of components. 
  • Note that if a component is already installed, and is not reinstalled, removed, or moved during the current installation, the action state of the component is null and the string [$componentkey] evaluates to Null.
If a substring of the form [!filekey] is found, it is replaced by the full short path of the file, with the value filekey used as a key into the File table. This syntax is valid only when used in the Value column of the Registry or the IniFile tables. When used in other columns this syntax is treated the same as [#filekey].

Invalid template string
Only Template data type is allowed. The Template data type is a text string that may contain properties that are enclosed in brackets [ ]. The template type allows all of the Formatted type formats, plus [1] where 1 is a number.

Invalid DefaultDir string
Only DefaultDir data type is allowed. The DefaultDir data type is a text string containing either a valid Filename or a valid Identifier. This is used only in the Directory table. It must be an identifier if the directory is a root directory. If the directory is a non-root, this value must be a filename or a filename:filename pair. Note that "." is allowed as a file name and has special meaning in the Directory table.

Invalid registry path
Only RegPath data type is allowed. The RegPath data type is a text string containing a Registry path. Registry paths can include properties, as with the Formatted data type. A RegPath may not begin or end with a backslash (\). The [#file key] and [$component key] can be embedded in the path or preceded by other characters.

Bad CustomSource data
Only CustomSource data type is allowed. The CustomSource data type is either a valid Identifier or an external key depending on the Type column of the CustomAction table. It can be an external key into the Binary table, File table, Directory table, and Property table.

Invalid property string
Only Property data type is allowed. The Property data type is a valid Identifier with the additional syntax "%identifier", which represents an environment variable.

Missing data in _Validation table or old Database
There are columns in the database that are not listed in the Column column of the _Validation table. The database and _Validation table do not match

Bad cabinet syntax/name
Only Cabinet data type is allowed. The Cabinet data type must be used in the Cabinet column of the Media table. If the cabinet name is preceded by the number sign, the cabinet is stored as a data stream inside the package. The character string which follows the # is an Identifier for this data stream. Note that if the cabinet is stored as a data stream, the name of a cabinet is case-sensitive.

_Validation table: Invalid category string
This is an error in authoring the _Validation table. Validation does not recognize the category string used for this particular column in the _Validation table. The following Column Data Types are specified as valid categories: Text, UpperCase, LowerCase, Integer, DoubleInteger, Time/Date, Identifier, Property, Filename, WildCardFilename, Path, Paths, AnyPath, DefaultDir, RegPath, Formatted, Template, Condition, GUID, Version, Language, Binary, CustomSource, Cabinet, Shortcut.

_Validation table: Data in KeyTable column is incorrect
The KeyTable column in the _Validation table references a table that does not exist in the database.

_Validation table: Value in MaxValue column < that in MinValue column
This is an error in authoring the _Validation table. Min must always be less than or equal to Max.

Bad shortcut target
Only Shortcut data type is allowed. The Shortcut data type is usually used in the Target column of the Shortcut table. If it contains square brackets ([ ]), the shortcut target is evaluated as a Formatted string. Otherwise, the shortcut is evaluated as an Identifier and must be a valid foreign key into the Feature table.

String overflow (greater than length permitted in column)
The string's length is greater than the column width specified by the column definition. Note that the installer does not internally limit the column width to the specified value. See Column Definition Format.

Undefined error
Unknown error
 
Column cannot be localized
Primary key columns cannot be localized.

How can I fix ICE03?

You will need to correct the data found in the specified table based on the data type information stored in _Validation table.