Я не согласен с мнением, что Двоичная таблица более или менее безопасна, чем таблица ISSetupFile.Оба они хранят (ссылаются на) двоичные потоки в своих записях и могут быть изменены преобразованиями.Возможно, вы имеете в виду легкость, с которой уже извлеченный файл может быть изменен?Но давайте отложим это и сосредоточимся на вашем вопросе.
Фигурные скобки - это визуальные обозначения, используемые в этом случае InstallShield для указания ссылки на двоичную таблицу.Это не нотация, распознаваемая установщиком Windows.Поэтому вам нужно найти что-то, что есть.
Если вы хотите использовать содержимое записи двоичной таблицы во время настраиваемого действия, есть две опции:
- Пусть это будет (часть) пользовательского действия, которое вы выполняете, причем само определение CustomAction ссылается на двоичную запись.Например, настраиваемое действие типа 1 часто запускает DLL, хранящуюся в двоичной таблице.Вы можете добавить дополнительные данные к этой dll, если вы управляете ею.
- Извлеките двоичную запись самостоятельно, запросив таблицу.Обратите внимание, что это может быть сделано только во время настраиваемого действия в непосредственном режиме, поэтому, если оно понадобится вам в отложенных режимах (выполнение в сценарии), вам придется извлечь его заранее, либо поместить в файловую систему, либо переправить (er,передать его через CustomActionData.
Если вы выполняете последнее в DLL C ++, вам, вероятно, понадобятся следующие функции:
- MsiGetActiveDatabase
- MsiDatabaseOpenView:
SELECT * FROM `Binary` WHERE `Name`=?
- MsiViewExecute: передать запись, содержащую имя из фигурных скобок
- MsiViewFetch
- MsiRecordReadStream
- MsiCloseHandle1029 *
Поскольку вы, вероятно, знаете имя записи вашей двоичной таблицы, вы можете жестко закодировать ее как 'namehere'
вместо ?
и пропустить запись.Обратите внимание на пометки вокруг имен таблиц и столбцов, но апострофы вокруг значения.Или, для большей безопасности, вы можете использовать заполнитель вопросительного знака и заполнить запись с помощью MsiCreateRecord и MsiRecordSetString.
Другие языки по-разному предоставляют одну и ту же базовую функциональность.Посмотрите, например, пример SDK WIStream.vbs , чтобы ознакомиться с обзором VBScript, но учтите, что вам придется запускать как пользовательское действие вместо внешнего скрипта.