Partilhar via


ICE69

O ICE69 verifica se todas as substrings do formulário [$componentkey] dentro de uma cadeia de caracteres formatada não fazem referência cruzada de 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 forma como formatadas cadeias de caracteres 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 null, porque o estado de ação do componente em [$componentkey] é null. Problemas semelhantes podem ocorrer durante as operações de atualização e reparo.

Resultado

ICE69 retorna um erro se uma substring [$componentkey] dentro de um formatado string faz referência cruzada a um componente em outro recurso. ICE69 retorna um aviso se uma substring [$componentkey] dentro de uma string formatada fizer 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. Fazer referência a componentes em recursos pai ou fazer referência a componentes em recursos filho é considerado um erro.)

ICE69 relata um erro se a substring [#FileKey] dentro de um formatado string faz referência a um arquivo que não é especificado na tabela File 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 de componentes. Altere o [$componentkey] para corresponder ao componente do atalho.

Tabela de atalho (parcial)

Atalho Component_ Argumento
Teste Teste rápido -v [$Test]
Atalho2 Teste rápido [$Test 2]

 

As tabelas Verb e Extension são casos especiais em que a tabela Verb 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 para a tabela de extensão é composta pelas colunas Extensão e Component_. Você pode logicamente ter a seguinte situação.

Tabela Verbal (parcial)

Extensão Verb_ Argumento
TST aberto -v [$comp 1][$comp 2]

 

Tabela de Extensão (parcial)

Extensão Component_
TST comp1
TST comp2

 

Tabela FeatureComponents

Feature_ Component_
Desenho1 Teste rápido
Desenho1 Teste
Desenho2 Teste2

 

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 Argumento da tabela Verbo ([$comp 1] e [$comp 2] no exemplo acima) deve fazer referência a um possível componente incluído com a extensão associada ao verbo. Uma referência como [$comp 3] resultaria num aviso da ICE69.

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

A coluna Argumento da tabela de classes é validada como a de atalho, do Registro e tabelas semelhantes.

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

IniFile

RemoveIniFile

Registro

RemoveRegistry

ServiceControl

ServiceInstall

de atalho

Verbo

Extensão

Classe

AppId

Ambiente

de referência ICE