ICE69

ICE69 comprueba que todas las subcadenas del formulario \[$componentkey\] dentro de una cadena con formato no hacen referencia cruzada entre componentes. Una referencia cruzada entre componentes se produce cuando la propiedad [$componentkey] de una cadena con formato hace referencia a un componente distinto del componente almacenado en la columna Component_ de las tablas.

Los problemas con las referencias cruzadas entre componentes surgen de la forma en que se evalúan las cadenas con formato. Si el componente al que se hace referencia con la propiedad [$componentkey] ya está instalado y no se cambia durante la instalación actual (por ejemplo, se vuelve a instalar, se mueve al origen, etc.), la expresión [$componentkey] se evalúa como null, porque el estado de acción del componente en [$componentkey] es null. Durante las operaciones de actualización y reparación pueden producirse problemas similares.

Resultado

ICE69 devuelve un error si una subcadena [$componentkey] dentro de una cadena con formato hace referencia cruzada a un componente en otra característica. ICE69 devuelve una advertencia si una subcadena [$componentkey] dentro de una cadena con formato hace referencia cruzada a un componente de la misma característica. (La tabla FeatureComponents se usa para determinar esta asignación. Debe asignarse a la misma característica para la advertencia. Hacer referencia a componentes en características principales o secundarias se considera un error).

ICE69 notifica un error si la subcadena [#FileKey] dentro de una cadena con formato hace referencia a un archivo que no se especifica en la tabla File como perteneciente al mismo componente.

Ejemplo

ICE69 informa de lo siguiente en los ejemplos mostrados.

WARNING: "Mismatched component reference. Entry 'Test' of the Shortcut table belongs to component 'QuickTest'. However, the formatted string in column 'Argument' references component 'Test'. Components are in the same feature."
ERROR: "Mismatched component reference. Entry 'Shortcut2' of the Shortcut table belongs to component 'QuickTest'. However, the formatted string in column 'Argument' references component 'Test2'. Components are not in the same feature."

Para corregir este error, no haga referencia cruzada entre componentes. Cambie [$componentkey] para que coincida con el componente del acceso directo.

Tabla Shortcut (parcial)

Acceso directo Component_ Argumento
Prueba QuickTest -v [$Test]
Shortcut2 QuickTest [$Test2]

 

Las tablas Verb y Extension son casos especiales en los que la tabla Verb hace referencia a una extensión que pertenece a un componente. Pero una tabla Extension puede pertenecer a varios componentes porque la clave principal de esta tabla se compone de las columnas Extension y Component_. Puede tener la siguiente situación de manera lógica.

Tabla Verb (parcial)

Comprobación de actualización Verb_ Argumento
tst abrir -v [$comp1][$comp2]

 

Tabla Extension (parcial)

Comprobación de actualización Component_
tst comp1
tst comp2

 

Tabla FeatureComponents

Feature_ Component_
Feature1 QuickTest
Feature1 Prueba
Feature2 Test2

 

En este caso, debe asegurarse de que al menos una de las propiedades [$componentkey] se evalúa como un valor distinto de null. Pero cada propiedad [$componentkey] de la columna Argument de la tabla Verb ([$comp 1] y [$comp 2] en el ejemplo anterior) debe hacer referencia a un posible componente incluido con la extensión asociada al verbo. Una referencia como [$comp 3] daría lugar a una advertencia de ICE69.

La tabla AppId tiene una situación similar a la tabla Verb. Usa la tabla Class para la referencia de su componente. En este caso, la tabla AppId se valida de la misma manera que la validación de Verb-Extension (ahora AppId-Class).

La columna Argument de la tabla Class se valida como Acceso directo, Registro y tablas similares.

Tabla usada durante la ejecución (solo si se encuentra)

IniFile

RemoveIniFile

Registro

RemoveRegistry

ServiceControl

ServiceInstall

Acceso directo

Verb

Extensión

Clase

AppId

Entorno

Referencia de ICE