Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
2Activity
0 of .
Results for:
No results containing your search query
P. 1
ICE Errors and Resolutions

ICE Errors and Resolutions

Ratings: (0)|Views: 241 |Likes:
Published by $!v@

More info:

Published by: $!v@ on Apr 07, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

04/05/2013

pdf

text

original

 
ICE Errors and Resolutions
11/19/2008 | Submitted ByRJ
 
What are Internal Consistency Evaluators (ICEs)?When I was visiting a customer a while ago, I ran into a software packagerwearing a funny t-shirt. I do not remember the name of the company whichwas promoting their packaging tool with that t-shirt at the time. However,the back of the t-shirt said “Real packagers do it on ICE†. :)

Every software packager involved with Windows Installer possibly knows thatit is not easy to do it on ICE, right?Even though Microsoft created the ICE validation rules to enforce consistencywithin the MSI database, you may need to deal with many validation errorsand warnings which do not have obvious cause or resolution. Whether youdeal with a repackaged application as MSI or a vendor-supplied MSI, you maysee hundreds of validation errors and warnings. Some errors and warningscan safely be left in packages and others should be resolved.Internal Consistency Evaluators (ICEs)Internal consistency evaluators are simply custom actions written in VBScript,JScript, or as a DLL or EXE. When these custom actions are executed, theyscan the database for entries in database records that are valid whenexamined individually but that may cause incorrect behavior in the context of the whole installation database.ICE custom actions return four kinds of messages.* Errors: Error messages report database authoring that cause incorrectbehavior. Errors may cause run-time problems for the installation databaseand/or the application which can be installed from the installation database.For example, using the same GUID for two components is not allowed andthis will result in an ICE error during validation.* Warnings: Warning messages report database authoring that causesincorrect behavior in certain cases. Warnings can also report unexpectedside-effects of database authoring. For example, entering the same propertyname in two conditions that differ only by the case of letters in the name.Because the installer is case-sensitive, the installer treats these as differentproperties.* Failures: Failure messages report the failure of the ICE custom action.Failure is commonly caused by a database with such severe problems thatthe ICE cannot even run.* Informational: Informational messages provide information from the ICEand do not indicate a problem with the database. Often they are informationabout the ICE itself, such as a brief description. They can also provideprogress information as the ICE runs.The mechanism to do a package validation is fairly simple. To validate a
 
database, you will need to use a special validation tool to merge a .cub file(sometimes called ice cubes) containing the Internal Consistency Evaluators(ICEs) into your database, execute the ICEs, and report the results. You canuse “MSI Validation Tool†that comes with MS Platform

SDK or use thirdparty utilities like “Wise Package Validation Wizard†.

Authors of installation packages can also write ICE custom actions or use thestandard set of ICEs included in the .cub files provided with the SDK. A .CUBfile is a special type of database that can also be opened by an MSI editingtool like ORCA (Orca comes with MS Platform SDK).
ICE01
What does ICE01 check?ICE01 validates that the ICE mechanism is working. It does not testanything. This ICE uses the Time property to get the time and returns eitherthe system time or None.When does ICE01 show up?Unless there is a problem with the ICE mechanism, ICE01 should neverreturn an error.Where can I get more information?Microsoft Platform SDK - ICE01
ICE02
 What does ICE02 check?ICE02 validates that certain references between the Component, File, andRegistry tables are reciprocal. These references must to be reciprocal for theinstaller to correctly determine the installation state of components.Key path value used for a component in the Component table must be theprimary key of a record in the Registry or File tables depending on the type of key path. In addition, the value used under Component_ column of File orRegistry tables must be the primary key of the corresponding record in theComponent table. Hence, the references must be reciprocal.When does ICE02 show up?ICE02 posts an error message if it finds a reference that is not reciprocal.How can I fix ICE02?You will need to modify the record so that the reference can be reciprocal.Where can I get more information?Microsoft Platform SDK - ICE02
ICE03
 What does ICE03 check?ICE03 checks the data types and foreign keys based on the _Validation tableand the database tables in the .msi file. The _Validation table is a systemtable that contains the column names and the data types for all of the tablesin the database. It is used during the database validation process to ensurethat 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 KeyThe primary keys of a new row duplicates the primary keys of an existingrow. The Nullable column of the _Validation table shows the primary keys inthe database.Not A Nullable ColumnA 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 KeyA column that is a foreign key into a second table contains an entry that doesnot exist in the primary key of the second table.Value exceeds MaxValueThe numeric value of an entry in a database table exceeds the maximumlimit specified for this field in the MaxValue column of the _Validation table.Value below MinValueThe numeric value of an entry in a database table is less than the minimumlimit specified for this field in the MinValue column of the _Validation table.Value not a member of the setThe value of an entry in a database table is not a member of the acceptableset of values specified for this field in the Set column of the _Validation table.Invalid version stringVersion number is not an acceptable value. The Version data type is a textstring containing a valid version string. A version string has the formatxxxxx.xxxxx.xxxxx.xxxxx where x is a digit.All UPPER case requiredLowercase values are not allowed. The UpperCase data type is a text stringthat must be all uppercase.Invalid GUID stringGlobally Unique Identifier used is not an acceptable value. The valid formatfor a GUID is {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} where X is ahex digit (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Note that utilities such asGUIDGEN can generate GUIDs containing lowercase letters. These must all bechanged to uppercase letters before the GUID can be used by the installer asa valid product code, package code, or component code.Invalid file name/usage of wildcardsThe database contains an invalid file name or an incorrect wildcard. TheWildCardFilename data type is a Filename that may also contain the wild cardcharacters "?" for any single character or "*" for zero or more occurrences of any character. The Filename data type is a text string containing a file nameor folder. By default, the file name is assumed to use short file name syntax;that is, eight-character name, period (.), and 3-character extension. Toinclude a long file name with the short file name, separate it from the shortfile name with a vertical bar (|).

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->