2012-05-11 2 views
0

Я реорганизую старое приложение installshield, и мне нужно выполнить действие, вызывающее функцию из пользовательской dll. К сожалению, функция, выполняемая этим действием, зависит от другой пользовательской dll. Поэтому мой вопрос: «Возможно ли, чтобы пользовательская dll зависела от другой пользовательской dll, и если да, то как?»Installshield использует пользовательскую dll из другой пользовательской dll

Когда я пытаюсь запустить установщик, он выходит из строя с ошибкой «Установка была прервана до завершения ...» Затем я скопировал вторую пользовательскую dll в папку, которую я добавил в PATH, и все прошло хорошо. Конечно, я не могу ожидать, что мой клиент сделает это вручную.

Я использую Installshield 2008, но я верю, что ответ на мой вопрос будет таким же для всех версий.

EDIT: а может быть, мой вопрос не достаточно ясно дам пример: Скажем, у меня есть A.DLL, который имеет функцию:

UINT __stdcall 
PerformAction(MSIHANDLE hInstall) // IN 
{ 
    ... 
    help(); 
    ... 
} 

справки() определяется в B.DLL. Теперь, когда я создаю новое действие, я установил dll как a.dll, и это имя функции будет PerformAction, но нет способа указать, что это зависит от b.dll. Когда я копирую b.dll в папку, включенную в PATH, Установщик работает нормально, но если я не ошибаюсь.

ответ

1

Простейший подход InstallShield здесь заключается в использовании файлов поддержки вместо или в дополнение к двоичным табличным записям. Установщик Windows будет извлекать только одну DLL для пользовательского действия, но если вы ссылаетесь на файл в SUPPORTDIR, он может использовать несколько.

+0

Как вы указываете установить экран для использования файла из SUPPORTDIR? Можете ли вы привести пример для случая, который я описываю? –

+0

InstallShield извлечет файл в SUPPORTDIR и установит свойство (используйте MsiGetProperty) с тем же именем с указанием пути к каталогу. Оттуда вы можете использовать LoadLibrary() для загрузки вашей DLL в память. –

Смежные вопросы