About Internal Consistency Evaluator (ICE) Error Validation
This article is intended to those of you who are new to packaging. Running validation is a very important step in insuring that you are creating a quality setup experience for your users. This article explains in-brief about most commonly occurring ICE Errors and solution to them. This article is a value addition to those existing articles.
Introduction
Validation is very important; it finds all sorts of problems with per-user installations, collisions between installed files, and other common mistakes that are hard to catch until the complete MSI file is built. Often, when debugging a setup problem, I've found that just running validation would quickly find the mistake(s). So if validation is so important, why doesn't everyone run it? There are a few reasons: some people simply aren't aware of MSI validation, others are lazy, and the great majority of people simply just forget because it's an optional step.
When an MSI is created we need to ensure that there are no errors contained within it. You may validate that the (.msi) package is properly constructed by running an Internal Consistency Evaluation tool.
ICE's are custom actions written in VBScript, Jscript, or as a DLL or EXE. When these custom actions are executed, they scan the MSI for entries in the database that are valid when examined individually but that may cause incorrect behavior in the context of the whole database.
Once the validation tool is run, a list of information regarding your MSI is compiled into a .txt format and displayed under three categories: Info, Warnings and Errors. Our only concern is to rectify the errors.
In this article I will be explaining some most commonly occurring ICE errors and their solutions.
The following lists the suggested solutions for each error message.
ICE03 ERROR
Basic data and foreign key validation.
ICE03 ERROR
Not a valid foreign key; Table: ProgId, Column: Class_, Key(s): Notes.NotesUIWorkspace
Solution:
Go to the ProgID table find the row that refers to Notes. Notes UIWorkspace and take note of the CLSID value. Once this has been noted, check the CLSID column in the Class_ table. This value was found to be missing, so copy the value and place it into the CLSID column of the Class_ table and fill in the rest of the information. To find out if its Context is LocalServer or LocalServer32 etc. you can look up the Registry in the Installation Expert. For this particular case Notes.NotesUIWorkspace had both LocalServer and LocalServer32 so the row had to be repeated but with this two different values in the Context column.
ICE03 ERROR
Invalid Filename; Table: Shortcut, Column: Name, Key(s): nminder.exe
ICE03 ERROR
Invalid Filename; Table: Shortcut, Column: Name, Key(s): notes.exe
Solution:
These two errors have the same remedy the only difference being the file name.
Go to the Shortcut table and in the Name column of the particular key mentioned you must add in the short name naming convention into the name column. This is done by creating an eight letter name for the shortcut where the last two letters are "~1" and this name is separated from the real name by a vertical bar "|". E.g. for nminder.exe the shortcut name is "Notes Minder" but to avoid this error you must have something like "NotesM~1|Notes Minder".
ICE03 ERROR
"Invalid format string; Table: IniFile, Column: Value, Key(s): ScrollRegion 670"
Solution:
There were at least 30 examples of this particular error. It turned out to be a problem with values on a specific INI File - TERMCAP.INI. The formatted data type is a text string that is processed to resolve embedded property names, table keys, etc. Because this INI value contains square brackets, the installer tries to resolve the non-existing property, finding an invalid format string when the matching pair for the square bracket is not found.
In order to fix this error a new syntax should be used replacing the square bracket sign (as follows):
[ ? [\[] ] ? [\]]
In this particular case it is recommended to export the INI table using the ORCA tool from Wise for Windows installer, make the changes required (Find and replace option) and import the table back to the MSI.
ICE03 ERROR
Table: WiseLangString Column: LanguageID Missing specifications in _Validation Table (or Old Database)
ICE03 ERROR
Table: WiseLangString Column: Text Missing specifications in _Validation Table (or Old Database)
ICE03 ERROR
Table: WiseLangString Column: X Missing specifications in _Validation Table (or Old Database)
ICE03 ERROR
Table: WiseLangString Column: Y Missing specifications in _Validation Table (or Old Database)
ICE03 ERROR
Table: WiseLangString Column: Width Missing specifications in _Validation Table (or Old Database)
ICE03 ERROR
Table: WiseLangString Column: Height Missing specifications in _Validation Table (or Old Database)
ICE03 ERROR
Table: WiseLangString Column: Dirty Missing specifications in _Validation Table (or Old Database)
Solution:
This error has to do with the _Validation table. If you look down the rows of the _Validation table you will find several that refererences to the WiseLangString table in the Table column. If you look at the corresponding Column column you will find that none of them mention columns X, Y, Width etc. If you click anywhere on the table and then right click and select new row you insert a new row. In the Table column of the new row you should enter the Table name i.e. WiseLangString and in the corresponding Column you should enter the missing value e.g. X and then you must state whether it is nullable or not. In order to get this information, go back to the referred table (WiseLangString in this case), right click on it and select the option "column info" to make sure whether the column value is nullable or not.
As this is a recurring error, a template will be created adding these new rows in the _Validation table.
ICE03 ERROR
Invalid identifier; Table: Property, Column: Property, Key(s): ALL USERS
Solution:
Change to ALLUSERS (without blank space). Set that property value to 2.
ICE03 ERROR
Invalid GUID string (Be sure GUID is all UPPER case); Table: TypeLib, Column: LibID, Key(s):{1CF542E0-D988-11cf-B485- 00805F98FACE}.0.notes32.tlb
*This error should not be considered.
ICE03 ERROR
Not a valid Foreign Key; ProgId, Column: Class_Key(s):
Reflection. Application.5 Reflection. Application.5 is a Class foreign Key in the ProgId Table but there is no corresponding Primary key in the Class Table.
Solution:
In the Class Table and create a new and corresponding row. To complete the row in the Class Table you will need
CLSID obtained from the ProgId table under Class column, ProgId Default obtained from the ProgId table under ProgId column, Description obtained from the ProgId table under Description column, Context obtained from the Registry in Installation Expertunder Hkey_Class_root find CLSID find corresponding GUID inside this folder find either LocalServer/LocalServer32, Component obtained from the Registry table Find GUID\LocalServer32 key-locate corresponding Value
Eg r1win.exe - available from dropdown list
Feature obtained from the Shortcut table Find component value - locate associated Target eg Shortcut1
ICE03 ERROR
Invalid Filename Table: Shortcut, Column: Name, Key(s) FTP_Client
Filename needs a short and Long version
Solution:
Add in a shortname version separated from Longname by "|".
Short name syntax is 6 letters followed by ~1 eg Refltn~1|Reflection 1
ICE03 ERROR
Invalid Identifier Table: IniFile, Column: IniFile, Key(s) eg +rucks
Invalid characters used - non-standard alphabet , syntax etc
Solution:
Remove / change incorrect characters in the IniFile column
ICE03 ERROR
Table: WiseModuleConfiguration Column: ModuleID_ Missing specifications in _Validation Table (or old Database)
Solution:
Missing values on the _Validation table. In the WiseModuleConfiguration right click to select 'column info' is it Nullable (Y) or Not (N). Enter this
Information in the WiseModuleConfiguration table under Columns:
Table = WiseModuleConfiguration Column = ModuleID_ Nullable = Y/N
ICE18 ERROR
Validates the Keypath column of the Component table when it is NULL.
ICE18 ERROR
"KeyPath for component: System_Administration is Directory: System_Administration. The Directory/Component pair must be listed in the CreateFolders table."
If the Keypath column of the Component table is NULL, this means that the directory listed in the Directory_ column is the Keypath for that component.
Solution:
In order to fix this error a reference needs to be added in the CreateFolders table. Go to CreateFolders table in Setup Editor and add new row. Fill in Directory_ and Component-_ columns.
ICE18 ERROR
KeyPath for component: 'NonFileComponent' is Directory:
'WindowsFolder'. The Directory /Component pair must be listed in the CreateFolders
If the KeyPath Column of the Component table is Null, the directory listed in the Directory Column is the Keypath for that component.
Solution:
Add a reference in the create folder table. In Setup Editor add new row fill in corresponding Directory and Component Columns
ICE19 ERROR
ICE19 ERROR
Extension: cil/rev/rbs advertises component 'NonFileComponent'. This component cannot be advertised because the KeyPath type disallows it
Solution:
In the Component Tab chose any component - choose File - select a file - right click - choose move
Move file to NonFileComponent - right click to make it key (set as key)
Or In the Components Table delete NonFileComponent
In Extension Table set Component column to a component other than NonFileComponent.
In feature Tableset NonFileComponent'Column to the component you assigned in the Extension table.
ICE30 ERROR
Validates that the installation of components containing the same file never installs the file more than once in the same directory.
ICE30 ERROR
"The target file 'compose' is installed in [Program Files Folder]\Exceednt\user\locale\ISO885~1\ by two different components on an SFN system: iso88595 and iso88596. This breaks component reference counting"
Solution:
Ice30 checks that two components containing the same file never installs that file in the same directory. In this particular error, the files 'compose' and 'compose378' are given the same filename by the installer (check the Filename column in the File table) so it looks like two different components are installing the same file. This error roots in the Directory table where the directories in which every file is going to be installed have the same Shortfilename in the DefaultDir column. This error should be fixed giving one of the directories a different Shortfilename (according to the convention).
ICE38 ERROR
Validates that components installed under the User's profile use a registry key under HKCU as a Keypath.
ICE38 ERROR
Component DesktopFolder installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file.
ICE38 ERROR
Component Internet_Explorer installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file.
ICE38 ERROR
Component System_Administration installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file.
Solution:
In the Components Tab, find the CurrentUser component, which holds all the user's information. Pick one of the registry keys (except the one set as a keypath), right click on it and select the option 'Move'. Move that key to the component referred on the ICE error message. Go to that component, open it and find the 'new key'. Right click on the entry and select 'Set as Key' option.
ICE41 ERROR
Validates that entries in the Extension and Class tables refers to components belonging to the referenced feature.
ICE41 ERROR
Extension rc1 references feature complete and component r1win.exe, but the that component is not associated with that feature in the FeatureComponents table.
Solution:
Change the entry in the Feature_ column of the Extension table entry to reference a feature that installs the component listed in the Component_ column or change the feature and component associated in the FeatureComponents table.
ICE41 ERROR
Extension rcl/r1w/rcl references Feature "Complete" and Component "rlwin.exe" but that Component is not associated with that feature in the FeaturesComponent Table.
Solution:
In the FeatureComponent Table find Feature associated with "rlwin.exe" Change the Feature Column in the Extension Table to match eg Shortcut1
I hope this will help.
Thanks,
Sid
