ICE69

ICE69 проверяет, что все подстроки формы [$componentkey] в форматируемой строке не ссылались на компоненты. Перекрестная ссылка на компоненты возникает, когда свойство [$componentkey] форматируемой строки ссылается на компонент, отличный от компонента, хранящегося в столбце Component_ таблиц.

Проблемы с ссылкой на компоненты возникают из-за способа вычисления форматированных строк. Если компонент, на который ссылается свойство [$componentkey], уже установлен и не изменяется во время текущей установки (например, переустановлен, перемещен в источник и т. д.), выражение [$componentkey] принимает значение NULL, так как состояние действия компонента в [$componentkey] равно NULL. Аналогичные проблемы могут возникнуть во время операций обновления и восстановления.

Результат

ICE69 возвращает ошибку, если подстрока [$componentkey] в форматируемой строке перекрестно ссылается на компонент в другой функции. ICE69 возвращает предупреждение, если подстрока [$componentkey] в форматируемой строке перекрестно ссылается на компонент в той же функции. (Для определения этого сопоставления используется таблица FeatureComponents . Он должен сопоставляться с той же функцией для предупреждения. Ссылка на компоненты в родительских компонентах или ссылки на компоненты в дочерних компонентах считается ошибкой.)

ICE69 сообщает об ошибке, если подстрока [#FileKey] в форматируемой строке ссылается на файл, который не указан в таблице File как принадлежащий тому же компоненту.

Пример

В приведенных примерах ICE69 сообщает следующее.

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."

Чтобы устранить эту ошибку, не следует перекрестно ссылаться на компоненты. Измените [$componentkey] в соответствии с компонентом ярлыка.

Сочетание клавиш (частичная)

Клавиша Компонент_ Аргумент
Тест QuickTest -v [$Test]
Ярлык2 QuickTest [$Test 2]

 

Таблицы Verb и Extension являются особыми случаями, когда таблица Verb ссылается на расширение, принадлежащее компоненту. Однако расширение может принадлежать нескольким компонентам, так как первичный ключ таблицы расширений состоит из столбцов Расширения и Component_. Логически может быть следующая ситуация.

Таблица глаголов (частично)

Расширение Глагол_ Аргумент
Tst open -v [$comp 1][$comp 2]

 

Таблица расширений (частичная)

Расширение Компонент_
Tst comp1
Tst comp2

 

Таблица FeatureComponents

Функция_ Компонент_
Функция 1 QuickTest
Функция 1 Тест
Функция 2 Test2

 

В этом случае необходимо убедиться, что по крайней мере одно из свойств [$componentkey] имеет значение, отличное от NULL. Однако каждое свойство [$componentkey] в столбце Argument таблицы Verb ([$comp 1] и [$comp 2] в приведенном выше примере) должно ссылаться на возможный компонент, включенный в расширение, связанное с глаголом. Ссылка, подобная [$comp 3], приведет к предупреждению от ICE69.

В таблице AppId ситуация аналогична таблице Verb. Он использует таблицу Class для ссылки на свой компонент. В этом случае таблица AppId проверяется так же, как и проверка Verb-Extension (теперь AppId-Class).

Столбец Аргумент таблицы Класса проверяется, как ярлык, реестр и аналогичные таблицы.

Таблица, используемая во время выполнения (только если она найдена)

IniFile

RemoveIniFile

Реестр

RemoveRegistry

ServiceControl

ServiceInstall

Клавиша

Команда

Расширение

Класс

Appid

Среда

Справочник по ICE