Две программы Delphi должны загрузить foo.dll, который содержит некоторый код, который внедряет сертификат аутентификации клиента в запрос SOAP. foo.dll находится в c: \ fooapp \ foo.dll и обычно загружается c: \ fooapp \ foo.exe. Это отлично работает. Другой программе нужна та же функциональность, но она находится в каталоге c: \ program files \ unwantedstepchild \ sadapp.exe. Обе ап загружают DLL с этим кодом:
FOOLib := LoadLibrary('foo.dll');
...
If FOOLib <> 0 then
begin
FOOProc := GetProcAddress(FOOLib , 'xInjectCert');
FOOProc(myHttpRequest, Data, CertName);
end;
Отлично работает для foo.exe, так как DLL прямо здесь. sadapp.exe не может загрузить библиотеку, поэтому FOOLib равен 0, а остальное никогда не вызывается. Поэтому программа sadapp.exe молча не может внедрить сертификат, и когда мы проверяем продукт, если сертификат отсутствует, происходит ли сбой соединения. Очевидно, мы должны были полностью указать путь к DLL. Не вдаваясь в подробности, до недавнего времени были аспекты тестирования, которые маскировали эту проблему, и теперь в основном уже слишком поздно исправлять код, поскольку для этого потребуется полный регрессионный тест, и времени для этого нет.
Поскольку мы загнали себя в угол, мне нужно знать, есть ли какие-то варианты, которые я упустил. Хотя мы не можем изменить код (для этого выпуска), мы МОЖЕМ подправить установщик. Я обнаружил, что размещение c: \ fooapp в путь работает. Как и добавление второй копии файла foo.dll непосредственно в c: \ program files \ unwantedstepchild.
c: \ fooapp \ foo.exe всегда будет работать, пока запущен sadapp.exe, поэтому я надеялся, что Windows найдет его таким образом, но, очевидно, нет. Есть ли способ сказать Windows, что я действительно хочу эту же DLL? Может быть, манифест или что-то? Это своего рода «волшебная пуля», которую я ищу.
Я знаю, что могу:
- Изменить путь к Windows, возможно, в установщике. Это безобразно.
- Добавьте вторую копию DLL прямо в папку unwantedstepchild. Тоже некрасиво
- Задержка проекта, пока мы кодируем и тестируем правильное исправление. Неприемлемо.
- Другое
Спасибо за любые рекомендации, особенно с "Другое". Я понимаю, что эта проблема не обязательно специфична для Delphi. Спасибо!