Compartilhar via


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 cadeias de caracteres formatadas são avaliadas. Se o componente referenciado com a propriedade [$componentkey] já estiver instalado e não estiver 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.

Resultado

ICE69 retornará um erro se uma subcadeia de caracteres [$componentkey] dentro de um formatado cadeia de caracteres faz referência cruzada a um componente em outro recurso. ICE69 retorna um aviso se uma subcadeia de caracteres [$componentkey] dentro de uma cadeia de caracteres formatada faz 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 se a subcadeia de caracteres [#FileKey] dentro de um formatado cadeia de caracteres fizer referência a um arquivo que não é especificado na tabela arquivo 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.

de Tabela de Atalho (parcial)

Atalho Componente_ Argumento
Teste QuickTest -v [$Test]
Atalho2 QuickTest [$Test 2]

 

As tabelas verbo e extension são casos especiais em que a tabela Verbo faz referência a uma extensão que pertence a um componente. Uma Extensão, no entanto, pode pertencer a vários componentes porque a chave primária da tabela de extensão é composta pelas colunas Extensão e Component_. Você pode logicamente ter a situação a seguir.

de Tabela de Verbos (parcial)

Extensão Verbo_ Argumento
Tst abrir -v [$comp 1][$comp 2]

 

da Tabela de Extensão (parcial)

Extensão Componente_
Tst comp1
Tst comp2

 

da tabela FeatureComponents

Característica_ Componente_
Feature1 QuickTest
Feature1 Teste
Feature2 Test2

 

Nesse caso, você deve garantir que pelo menos uma das propriedades [$componentkey] seja avaliada como um valor não nulo. No entanto, cada propriedade [$componentkey] na coluna Argument da tabela Verbo ([$comp 1] e [$comp 2] no exemplo acima) deve referenciar um possível componente incluído na extensão associada ao verbo. Uma referência como [$comp 3] resultaria em um aviso do ICE69.

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

A coluna Argumento da tabela Classe é validada como o de Atalho de, do Registro e tabelas semelhantes.

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

iniFile

RemoveIniFile

do Registro

RemoveRegistry

ServiceControl

ServiceInstall

de Atalho

verbo

de extensão

classe

AppId

de Ambiente

de referência do ICE