Internal Consistency Evaluators

17
Internal Consistency Evaluators – ICEs Internal consistency evaluators, also called ICEs, are custom actions written in VBScript, JScript, or as a DLL or EXE. When these custom actions are executed, they scan the database for entries in database records that are valid when examined individually but that may cause incorrect behavior in the context of the whole database. ICE 01 Message Solution 1 ICE 02 Message Solution 1 File: ‘…’ not found in File Table. Ice02.html Component KeyPath ODBCDataSource Evaluation: ICE02 Under the Component Table, change the attribute to 32 for the ODBCDataSource ICE 03 Message Solution 1 ICE Internal Error 1149. API Returned: 1615. 2 Error 2228: ,_FtrRef, SELECT ‘Table’, ‘Column’ FROM ‘_FtrRef’ WHERE ‘Table’ = ‘Property’ AND ‘Colomn’ = ‘Property’ 3 String overflow (greater then length permitted in column); Table: “…”. Column: Target Key(s): “…” There is more data inserted in the field then permitted.(more than 255 characters). This usually happens when a VBScript is added to the installation. In most cases it will just function with the error. 4 Invalid “…” string: Table: “…”, Column: “…”, Key(s): “…” There is no legal string entered for the given key. Commonly an invalid character triggers this error, i.e. a filename with non- English characters like ä, ë or ü. If possible change these characters to a, e or u. 5 Not a valid foreign key; Table: “-_Validation”, Column: “…”, Check the _Validation table for the following entries:

Transcript of Internal Consistency Evaluators

Page 1: Internal Consistency Evaluators

Internal Consistency Evaluators – ICEs

Internal consistency evaluators, also called ICEs, are custom actions written in VBScript, JScript, or as a DLL or EXE. When these custom actions are executed, they scan the database for entries in database records that are valid when examined individually but that may cause incorrect behavior in the context of the whole database.

ICE 01Message Solution

1

ICE 02Message Solution

1 File: ‘…’ not found in File Table. Ice02.html Component KeyPath ODBCDataSource Evaluation: ICE02

Under the Component Table, change the attribute to 32 for the ODBCDataSource

ICE 03Message Solution

1 ICE Internal Error 1149. API Returned: 1615.2 Error 2228: ,_FtrRef, SELECT ‘Table’,

‘Column’ FROM ‘_FtrRef’ WHERE ‘Table’ = ‘Property’ AND ‘Colomn’ = ‘Property’

3 String overflow (greater then length permitted in column); Table: “…”. Column: Target Key(s): “…”

There is more data inserted in the field then permitted.(more than 255 characters). This usually happens when a VBScript is added to the installation. In most cases it will just function with the error.

4 Invalid “…” string: Table: “…”, Column: “…”, Key(s): “…”

There is no legal string entered for the given key. Commonly an invalid character triggers this error, i.e. a filename with non-English characters like ä, ë or ü. If possible change these characters to a, e or u.

5 Not a valid foreign key; Table: “-_Validation”, Column: “…”, Key(s): “…”

Check the _Validation table for the following entries:WiseReleaseMedia | MediaName |NWiseReleaseMedia | Release_ | NWiseReleaseMedia | DiskID | YWiseReleaseMedia | Size | YWiseReleaseMedia | Attributes | Y

6 Not a valid foreign key: Table: “Shortcut:” Column: “Icon*.*”

The Icon_ column in the shortcut table must match the exact entry (Icon name) in the Icon table.

Not a valid foreign key; Table: Class, Column: Icon_, Key(s): classid > . < context > . < component_ > in Class table

The incorrect icon ID was in the Icon_ column.   Lookup the correct Icon_ id in the Icon table and copy it to the Icon_ column in the Class table. The exact path can be copied.

7 Not a valid foreign key; Table: ODBCSourceAttirbute, Column: DtaSource_, Key(s):

The value of the Datasource_ column in the ODBCSourceAttribute table is pointing to a primarykey in the ODBCDataSource table which doesn’t exist.

8 Not a valid foreign key: Table; Class, Column: AppID_, Key(s): {GUID}.InprocServer32.smartui2.ocx_COM

Smartui2.ocx is used as an example.Value in te AppID column should only be a GUID value that links to the AppID table.

Page 2: Internal Consistency Evaluators

Check the compnents and its gien name as in the error message.This error may occur if you made changes in the package or in the tables.

9 Not a valid foreign key; Table: File, Column: Component_, Key(s): PCBLIB32.DLL174ice03.html File Component_PCDLIB32.DLL174

There is a file in the file table that is a resource of the PCDLIB32.DLL174 component, but you don’t have a component in the component table with this name. Create component.

10 Invalid identifier; Table: ProgId, Column: Icon_, Keys(s): idoc_auto_file ProgId Icon_idoc_auto_file

Icon_ An optional foreign key into the Icon table that specifies the icon file associated with this ProgId. This is written under the DefaultIcon key associated with this ProgId. This column must beNull for a version independent ProgId.

11 Invalid identifier; Table: RemoveFile, Column: Component_, Key(s): '.....'. Found in RemoveFile table.

Check the Component ID.

12 Invalid Filename; Table: “…”, Column: “…”, Filename, Key(s): “…”

There is an invalid name entered for a file.

13 Invalid Language Id; Table: File, Column: Language, Key(s): File '....' in File table.

Look at the language set against other files - either change the entry to the same language as other files, change it to 0 or remove the language completely.

14 Invalid Filename/usage of wildcards; Table: “…”, Column: “…”; Filename, Key(s): “…”

The file was down to be removed, but was not in the File table to be added, so removed:   (a)   the entry in RemoveFile table   (b)   the entry in Component table Or ensure that the file is in the File table if it is required.

15 Invalid Full Path; Table: “Directory, Column: “DefaultDir, Key(s): ProfilesFolder

In the _Validation table change the value of the Category column back to DefaultDir.

16 Invalid property string; Table: directory, Column: DefaultDir, Key(s):ProgramFilesFoldercommonFilesFolderAppDataFolderCommonAppDataFolder etc.

Go to Directory table, check if the Column DefaultDir also has the shortfile name:i.e. CommonAppDataFolder.:APPLIC~1|Application Data. If not add the shortfile name.

17 Invalid filename/iniFile table; Table: iniFile; Column: File

Ini file names contain spaces inside the shortfile name Delete the spaces inside the short file names. Leave the long file names alone.

18 Invalid format string; Table: Registry, Column: Key, Key(s): "StringName" Registry table.

Check the syntax of the Key 'StringName' in Column Key - may be a missing these brackets {....} or they need to be closed in that string.

19 Invalid GUID string. Be sure GUID is all UPPER case20 Not a valid foreign key; Table: ProgId,

Column: Class_, Key(s): '....' in ProgId table.'foreign key' will be a class that has not been listed in the Class table

ICE 04Message Solution

1 File: MyFile, Sequence: 210 Greater Than Max Allowed by Media Table. Ammount in the media table.

Validates that the sequence number of every file in the file Table is less than or equal to the largest sequence number in the LastSequence column of the Media Table. Check the number of files in the sequence column and adjust this to last entry in the media table.

Page 3: Internal Consistency Evaluators

ICE 08Message Solution

1 (Duplicate GUIDS) 2 components with the same GUIDs.

Change the GUID of one of these components.

ICE 09Message Solution

1 Component “…” is a non-permanent system component

On the component mentioned, the option “Always increment shared .DLL count” must be activated. If the component points to a Merge Module the error can be ignored. This is an acceptable error, however to make the component a permanent system component then give it a value of 24 in the Attrib column

ICE 15

Message Solution1 MIME Type 'AppName' referenced by

extension 'Ext'.'AppName' does not map to an extension with a circular reference Extension Remove the entry from MIME column in Extension table.

ICE 18

Message Solution1 KeyPath for Component “…” is Directory

“…”. The Directory is not listed in the CreateFolders table

Create a new row in the table “CreateFolder”, select the mentioned Directory and the mentioned Component.

ICE 19

Message Solution1 Extension: 'imgr' advertises component:

'imgr'. This component cannot be advertised because the KeyPath type disallows it. http://dartools/iceman/ice19.html Extension Component_imgr imgr

The component is empty or might show empty in view of files/registry, but may contain other information like extensions/ini files. In case of an extension being there, move it to a different component. In the extensions table choose a different component which has a key path and delete the empty component.

ICE 21

Message Solution1 Component: 'MyComponent' does not

belong to any Feature in FeatureComponents table.

Add an entry to FeatureComponents table with the following entries:   (a)   Feature_ = A Present Feature   (b)   Component_ = 'MyComponent'

Page 4: Internal Consistency Evaluators

ICE 24

Message Solution1 UpgradeCode: ' < None > 'is an invalid

Windows Installer GUID in Property table.

Modify the UpgradeCode field entry in Property table - use GUID Generator to generate a unique id, and copy this id into the UpgradeCode field

ICE 27

Message Solution1 Unknown action: 'Action1' of

InstallExecuteSequnence table. Not a standard action and not found in CustomAction or Dialog tables.

There is an action listed in the sequence table indicated that is not a standard actions , a custom action listed in the CustomAction table , or a dialog box listed in the Dialog table .

ICE 30

Message Solution1 Installation of Component “…” would

cause the target file “…” to be installed twice in “…” on a SFN/LFN system. This will break the component reference counting system.

Go to the given component. In that component there are two files with the same name. One of those files must be deleted.

2 Installation of a conditionalized component would cause the target file “…” to be installed in “….” By two different components on a LFN system: “…” and “…”. This would break component reference counting.

The This file is installed by two components in the same directory. It is possible that the file also exists in a merge module. Delete the file ot of the given component.

3 The Target file “…” might be installed in “…” by two different conditionalized components on a SFN/LFN system: “…” and “…”. If the conditions are not mutually exclusive, this will break the component reference counting system.

The file is installed/exists by/in two different merge modules. This error can be ignored, because the reference counting system setting is done by the merge module.

ICE 32

Message Solution1 Possible Mis-Aligned Foreign Keys

ModuleSignature.1 = s72Modulecomponents.ModuleID = s72

Edit the ModuleSignature and Modulecomponents table schema and ensure that both columns (‘1’ and ‘ModuleID’) have the same string length.

ICE 33

Message Solution1 Reg Key “…” is used in an unsupported

way. This key need not to be written as it already exists in the system.

This error is usually generated by a merge module, if this error is generated by a merge module, it can be ignored.This entry may overwrite a value created through that table. Various   (a)   check Verb table for extensions   (b)   check Extensions table for same extensions

Page 5: Internal Consistency Evaluators

  (c)   copy the value from the Registry table to the Argument column in the Verb table   (d)   delete the entry from the Registry table

2 Reg Key “…” is used in an unsupported way. Typelib HELPDIR should be registered via the Typelib Table. This entry may overwrite a value created through that table.

This entry may overwrite a value created through that table. Registry table   (a)   add an entry to the Typelib table   (b)   delete the entry from the Registry table

3 Reg key “…” is used in an unsupported way. Typelib should be registered via the Typelib table – this key is automatically written during typelib registration.

In the registry path HK_Classes_Root\Typelib there are several key’s that also exist in the Typelib table. The key’s that exist in that table can be deleted from the registry. If the error is generated by a merge module, it can be ignored.

4 Reg key “…” is used in an unsupported way. CLSID – ProgId should be registered via the Class and ProgId tables. This entry may overwrite a value created through those tables.

In the registry path HK_Classes_Root\ there are several key’s that also exist in the ProgId table. The key’s that exist in that table can be deleted from the registry. All sub-key’s can also be deleted. If the error is generated by a merge module, it can be ignored.

5 Reg key “…” is used in an unsupported way. ProgId – CLSID associations should be registered via the ProgId and Class tables. This entry may overwrite a value created through those tables.

In the registry path HK_Classes_Root\ there are several key’s that also exist in the ProgId table. The key’s that exist in that table can be deleted from the registry. All sub-key’s can also be deleted. If the error is generated by a merge module, it can be ignored.

6 Reg key “…” is used in an unsupported way. CLSID contexts should be registered via the Class table. This entry may overwrite a value created through that table.

This entry may overwrite a value created through that table   (a)   add an entry to the Class table   (b)   delete the entry from the Registry tableIf in one of the sub-keys there is a value that begins with “[!” or there is a name of a DLL or OCX mentioned then that DLL or OCX should be set to registers itself.

7 Reg key “…” is used in an unsupported way. CLSID DefinprocHandler should be registered via the Class table. This entry may overwrite a value created through that table.

In the registry path HK_Classes_Root\CLSID there are several key’s that also exist in the Class table. The key’s that exist in that table can be deleted from the registry. All sub-key’s can also be deleted. If the error is generated by a merge module, it can be ignored.

If in one of the sub-keys there is a value that begins with “[!” or there is a name of a DLL or OCX mentioned then that DLL or OCX should be set to registers itself.

8 Reg key “…” is used in an unsupported way. CLSIDs should be registered via the Class table. This entry may overwrite a value created through that table.

In the registry path HK_Classes_Root\CLSID there are several key’s that also exist in the Class table. The key’s that exist in that table can be deleted from the registry. All sub-key’s can also be deleted. If the error is generated by a merge module, it can be ignored.

If in one of the sub-keys there is a value that begins with “[!” or there is a name of a DLL or OCX mentioned then that DLL or OCX should be set to registers itself.

9 Reg key “…” is used in an unsupported way. Version Independent ProgId should be registered via the ProgId table. This entry may overwrite a value created

In the registry path HK_Classes_Root\ there are several key’s that also exist in the ProgId table. The key’s that exist in that table can be deleted from the registry. All

Page 6: Internal Consistency Evaluators

through that table. sub-key’s can also be deleted. If the error is generated by a merge module, it can be ignored

10 Reg key “…” is used in an unsupported way. ProgId should be registered through the ProgId table. This entry may overwrite a value created through that table.

In the registry path HK_Classes_Root\ there are several key’s that also exist in the ProgId table. The key’s that exist in that table can be deleted from the registry. All sub-key’s can also be deleted. If the error is generated by a merge module, it can be ignored.

11 Reg key '....' is used in an unsupported way. Shell extension verbs information should be registered via the Verb table.

This entry may overwrite a value created through that table. Various   (a)   check Verb table for extensions   (b)   check Extensions table for same extensions   (c)   copy the value from the Registry table to the Argument column in the Verb table   (d)   delete the entry from the Registry table

Reg Key '....' is used in an unsupported way. ProgId - Icon associations should be registered via the ProgId and Icon tables.

This entry may overwrite a value created through those tables

ICE 36

Message Solution1 Icon Bloat. Icon '....' is not used in the

Class, Shortcut, or ProgID table. This adversely affects performance.

If the icon can be used in either the Class, Shortcut or ProgId tables, then use it; otherwise delete it as it?s not required

ICE 38

Message Solution1 Component “…” installs to user profile. It

must use a registry key under KHCU as its keypath, not a file.

(a)   find all occurrences of this component - usually in CreateFolder table (along with Component table and FeatureComponent table)   (b)   add an entry to the Registry table with the following details:        Reg       = Regisrtyxxx Root      = 1 (for HKCU) 2 (for HKLM)        Key       = Software\xxxxxx\Directories        Name    = component GUID        Value    = directory id        Comp    = component id   (c)   copy the Registry id into the KeyPath column of the component, in the Component table   (d)   change the 0 in Attributes column to 4

2 Component '....' installs to user profile. It must use a registry key under HKCU as its KeyPath. The KeyPath is currently NULL

Find all occurrences of this component - if in Shortcut table (along with Component table and FeatureComponent table)   a)    add an entry to the Registry table with the following details:        Reg       = Featurexxx Root      = 1 (for HKCU) 2 (for HKLM)        Key      = Software\xxxxxxx\Shortcuts

Page 7: Internal Consistency Evaluators

       Name    = component GUID        Value    = shortcut id        Comp    = component id   b)    copy the Registry id into the KeyPath column of the component, in the Component table  

Find all occurrences of this component - if in File table (along with Component table and FeatureComponent table)   (a)   add an entry to the Registry table with the following details:        Reg       = Featurexxx        Root      = 1 (for HKCU)        Key       = Software\xxxxxx\Files        Name    = component GUID        Value    = file id        Comp    = component id   (b)   copy the Registry id into the KeyPath column of the component, in the Component table  

Find all occurrences of this component - if in Registry table

ICE 39

Message Solution1 The file “…” is explicitly marked

compressed, but the Summary Information Stream already specifies that the whole install is compressed. This might not be the behavior you want.

If the mentioned file is within a Merge Module this error can be ignored.

ICE 43

Message Solution1 Component “…” has non-advertised

shortcuts. It Should use a registry key under HKCU as its KeyPath, not a file.

Put one Current_User registry key under the mentioned component and set that registry key as the keypath or Create a dummy regkey with a value of 1 for HKCU. Change the attributes in the component table to 4, add the new dummy key as the key path for this component. Add the component in the registry table as the component

2 Reg Entry “…” is not of type REG_SZ on Windows 95 Systems. Make sure the component is conditionalized to never be installed on Win95 machines.

In the Component where Reg Entry “…” resides set the condition to “NOT Version9x”.

ICE 45

Message Solution

1 Row ‘Resume_Install_Dialog.InstallNow in table ‘Control’ has bits set in the ‘Attributes’ column that are reserved.

They should be 0 to ensure compatibility with future installer versions.

Page 8: Internal Consistency Evaluators
Page 9: Internal Consistency Evaluators

ICE 46

Message Solution1 Feature “..” has 2000 components. This

could cause problems on Win9x systems. You should try to have fewer than 817 components per feature.

This limitation no longer exists with Windows Installer version 2.0 or later.

Property ADDLocal defined in Property table differs from another defined property only by case.

Delete ADDLocal property and add the property in Caps and define as you need e.g. ALL

ICE 47

Message Solution1 Feature 'My Feature' has xxxx

components. This could cause problems in Win9x systems. You should try to have fewer than 817 components per feature.

If the install is not on a win95 build this is an acceptable error in most cases

ICE 50

Message Solution1 The extension of icon “…” for shortcut

“…” is not “exe” or “ico”. The icon will not be displayed correctly.

Shortcut TableCheck the filename being used for the shortcut, and ensure it's a valid extension (usually "dll") - if this is the case, then this is an usually an acceptable error.

2 The extension of icon '....' for shortcut '....' does not match the extension of the KeyFile for component '....'

If the extensions of the icon and the target file do not match, the shortcut will not have the correct context menu when the component is advertised. To fix this error, rename the icon to match the extension of the target file.

ICE 51

Message Solution1 Font “…” is a TTC\TTF font, but also has

a title.A TTF font automatically registers a title for the font. But a title is also given in the table. Go to the table font and delete the title text from the mentioned font.

ICE 53

Message Solution1 Registry Key 'xxxxxxx' writes Darwin

internal or policy information..This is usually reference to Installer keys in the registry and is spurious - delete them.

ICE 57

Message Solution1 Component 'ShortcutsComponent' has

both per-user data and a keypath that can be either per-user or per-machine. http://dartools/iceman/ice57.html Component Component

Create a new component holding the HKCU registry part, add that new component to an existing feature. Change the keypath for the Shortcutscomponent to another resource (noneuserprofile file or HKLM registry entry).

Page 10: Internal Consistency Evaluators

ShortcutsComponent'“ShortcutsComponent” used as example

In the Registry table find the registry entry and change the component column to the name of the component you created.

2 Component has both per user and per machine data with a per machine keypath

Create a new component (with a new GUID), move all of the per user data from the component that kicks up the error to the new one. Set one of the files/reg keys as it’s keypath. If you use a registry key as the keypath for the new component you’ll need to set the attribute on that component to 4 to avoid new ICE errors.

ICE 60

Message Solution1 The File “…” is not a Font, and its

version is not a companion file reference. It should have a language specified in the Language Column.

If this error is generated by a Merge Module, the error can be ignored.

ICE 62

Message Solution1 The isolated shared component “…” is

shared by multiple applications (including…) that are installed to the directory “…”.

There are DLL’s isolated in compare cense to executables that are in the same directory. Check what executable is installed in the same directory as a DLL. Then delete all association to that executable in the IsolatedComponent Table.

ICE 64

Message Solution1 The directory '....' is in the user profile but

is not listed in the RemoveFile table.There are DLL’s isolated in compare cense to executables that are in the same directory. Check what executable is installed in the same directory as a DLL. Then delete all association to that executable in the IsolatedComponent Table. Orin RemoveFile tableFind this component in the Component table - if IN Component table:   (a)   add an entry to the RemoveFile table with the following details:        FileKey             = 'xxxxxxx'        Component        = component id        FileName           = leave blank        DirProperty        = directory id        InstallMode        = 3

Find this component in the Component table - if NOT in Component table:   (a)   add an entry to the Component table   (b)   add an entry to the FeatureComponents table   (c)   add an entry to the RemoveFile table with the following details:        FileKey              = '....'        Component        = component id        FileName           = leave blank

Page 11: Internal Consistency Evaluators

       DirProperty        = directory id        Install Mode       = 3

ICE 80

Message Solution1 This 64BitComponent DIFxAPI.dll uses

32BitDirectory Driversice80.html ComponentDirectory_ DIFxAPI.dll

Remove 64-bit driver condition on Components Table and change the attribute to 0 from 256.

ICE 99

Message Solution1 WindowsVolume is the same as one of the

MSI Public Properties and can cause unforeseen side effects. ice99.html Directory Directory WindowsVolume

Remove the WindowsVolume property entry from the Property table. WindowsVolume is a system directory which will be populated from the Directory table.

2 Same as above, different folder name. Delete the offending Directory table row and then find entries which contained it in the Component table and change its folder name to 'WindowsFolder'