Я хочу, чтобы зависимости (несколько DLL-файлов) копировались в отдельный подкаталог. После установки моей программы, структура каталогов будет выглядеть следующим образом:Inno Setup: поместить DLL в подкаталог
- DLLs/
- A.DLL
- B.dll
- образец/
- pg.exe
Соответствующая часть моего сценария выглядит следующим образом:
[Dirs]
Name: "{app}\sample"
Name: "{app}\dll"
[Files]
Source: "pg.exe"; DestDir: "{app}"; Flags: ignoreversion
; icon file
;Source: "pg.ico"; DestDir: "{app}"
; sample ini and geoemtry file
Source: "geometry.xml"; DestDir: "{app}\sample"
Source: "ini.xml"; DestDir: "{app}\sample"
; DLL
Source: "a.DLL"; DestDir: "{app}\dll"; Flags: onlyifdoesntexist
Source: "b.DLL"; DestDir: "{app}\dll"; Flags: onlyifdoesntexist
Когда я тестирую свой установщик в виртуальной машине, я получаю сообщение об ошибке, в котором говорится, что файл.DLL не найден. Проблема быстро решена, если я просто скопирую a.DLL
из dll/
в каталог исполняемого файла.
- Нужно ли устанавливать все DLL на том же уровне, что и исполняемый файл?
- Или есть способ заставить исполняемый файл найти его зависимости в подкаталоге dll /?
Вы используете явную или неявную DLL связи? –
Не знаю. Как узнать? – Tengis
Явная связь достигается с помощью 'LoadLibrary' или' LoadLibraryEx' в коде, неявная связь достигается с помощью операторов 'dllimport' /' dllexport', а библиотеки DLL должны иметь соответствующие файлы библиотеки импорта (.LIB). См. Мой ответ для более подробной информации. –