ICE69

O ICE69 verifica se todas as subcadeias de caracteres do formulário [$componentkey] em uma cadeia de caracteres formatada não fazem referência cruzada a componentes. Uma referência entre componentes ocorre quando a propriedade [$componentkey] de uma cadeia de caracteres formatada se refere a um componente diferente do componente armazenado na coluna Component_ de suas tabelas.

Os problemas com a referência entre componentes surgem da maneira como as cadeias de caracteres formatadas são avaliadas. Caso o componente referenciado com a propriedade [$componentkey] já esteja instalado e não esteja sendo alterado durante a instalação atual (por exemplo, sendo reinstalado, movido para a origem e assim por diante), a expressão [$componentkey] será avaliada como nula, pois o estado de ação do componente em [$componentkey] é nulo. Problemas semelhantes podem ocorrer durante operações de atualização e reparo.

Result

O ICE69 retornará um erro caso uma subcadeia de caracteres [$componentkey] dentro de uma cadeia de caracteres formatada faça referência cruzada a um componente em outro recurso. O ICE69 retornará um aviso caso uma subcadeia de caracteres [$componentkey] dentro de uma cadeia de caracteres formatada faça referência cruzada a um componente no mesmo recurso. (A tabela FeatureComponents é usada para determinar esse mapeamento. Ele deve ser mapeado para o mesmo recurso para o aviso. Referenciar componentes em recursos pai ou referenciar componentes em recursos filho é considerado um erro.)

O ICE69 relatará um erro caso a subcadeia de caracteres [#FileKey] dentro de uma cadeia de caracteres formatada faça referência a um arquivo que não está especificado na Tabela de Arquivos como pertencente ao mesmo componente.

Exemplo

O ICE69 relata o seguinte para os exemplos 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 corrigir esse erro, não faça referência cruzada a componentes. Altere o [$componentkey] para corresponder ao componente do atalho.

Tabela de Atalhos (parcial)

Atalho Component_ Argumento
Teste QuickTest -v [$Test]
Shortcut2 QuickTest [$Test2]

 

As Tabelas de Verbos e Extensões são casos especiais em que a Tabela de Verbos faz referência a uma extensão que pertence a um componente. No entanto, uma Extensão pode pertencer a vários componentes porque a chave primária da tabela de extensões é composta pelas colunas Extensão e Component_. É possível logicamente ter a situação a seguir.

Tabela de Verbos (parcial)

Extensão Verb_ Argumento
tst Abrir -v [$comp1][$comp2]

 

Tabela de Extensões (parcial)

Extensão Component_
tst comp1
tst comp2

 

Tabela FeatureComponents

Feature_ Component_
Feature1 QuickTest
Feature1 Teste
Feature2 Test2

 

Nesse caso, garanta que pelo menos uma das propriedades [$componentkey] seja avaliada como um valor não nulo. No entanto, cada propriedade [$componentkey] na coluna Argumento da Tabela de Verbos ([$comp1] e [$comp2] no exemplo acima) deve referenciar um componente possível incluído na extensão associada ao verbo. Uma referência como [$comp3] resultaria em um aviso do ICE69.

A Tabela AppId tem uma situação semelhante à Tabela de Verbos. Ele usa a Tabela de Classes para sua referência de componente. Nesse caso, a Tabela AppId é validada da mesma forma que a validação de Verbo-Extensão (agora AppId-Classe).

A coluna Argumento da Tabela de Classes é validada como atalho, Registro e tabelas semelhantes.

Tabela usada durante a execução (somente se encontrada)

IniFile

RemoveIniFile

Registro

RemoveRegistry

ServiceControl

ServiceInstall

Atalho

Verbo

Extensão

Classe

AppId

Ambiente

Referência do ICE