Как можно вынудить VB6 использовать DLLs и OCXs от каталога приложения?

15
задан Joel Coehoorn 18 April 2012 в 18:49
поделиться

5 ответов

Можно также хотеть попытаться настроить Reg-свободный COM для проекта. Существует бесплатное программное обеспечение, названное , Делают Мою Декларацию , которая сделает большую часть работы для Вас

РЕДАКТИРОВАНИЕ , веб-сайт MMM снижается. Я вижу здесь , что автор испытывал затруднения из-за их хостинга и обеспечил, другое местоположение для получения Делают Мою Декларацию - загрузка это здесь .

12
ответ дан 1 December 2019 в 01:39
поделиться

Ответ Clay Nichol о поисковом порядке не совсем корректен. Тот поисковый порядок только относится к не-COM-компонентам. Т.е. только некоторый DLLs и не OCXs. Если Вы зарегистрируете свои COM-объекты, то они будут использоваться из каталога, где они регистрируются независимо от того, что находится в локальном каталоге, , если Вы не используете reg-свободный COM или .local файл.

РЕДАКТИРОВАНИЕ:

о MakeMyManifest хорошо говорят как автоматический инструмент для создания деклараций для проектов VB6, не попробовали его самостоятельно. DirectCOM также имеет вентиляторы, снова я не попробовал его.

РЕДАКТИРОВАНИЕ веб-сайт MMM снижается. Я вижу здесь , что автор испытывал затруднения из-за их хостинга и обеспечил, другое местоположение для получения Делают Мою Декларацию - загрузка это здесь .

существует полуавтоматическая техника для генерации reg-бесплатных деклараций COM. Можно создать декларации с Visual Studio 2008 (можно использовать бесплатную версию как Visual Basic Express Edition). Затем сделайте несколько редактирований вручную для создания деклараций подходящими для использования от VB6. См. , этот раздел из этой статьи MSDN для пошаговых инструкций - игнорирует остальную часть статьи, которая является о ClickOnce.

6
ответ дан 1 December 2019 в 01:39
поделиться

Размещение библиотек компонентов в папке EXE (с или без .local файлов) может быть вредным к гигиене целевых машин также.

программы VB6 зарегистрируют компоненты здесь через self-reg entrypoint за Вашей спиной, если они не будут ранее зарегистрированы. Затем, если приложение перемещено или удалило Вас, оставляют пользователя с поврежденным reigistration - возможно фатальным для впоследствии установленных приложений с помощью некоторых из тех же компонентов. Это прекрасно, вероятно, хотя для специализированных компонентов, т.е. Вашего собственного DLL или OCX, который будет никогда быть необходимым другому приложению.

прием .local не был действительно предназначен для использования с программами VB6 и если это используется, Ваш установщик должен знать и правильно установить и зарегистрировать компоненты, если они уже не находятся на машине. Это было предназначено как ручной взлом для обхождения проблем совместимости версий DLL на отдельных машинах, не стратегии развертывания.

Перемещение до приложения SxS и манифестов сборки (Reg-свободный COM и больше) для лучшего решения. Перенаправление DLL/COM (.local) было хорошей попыткой, но оно имеет много бородавок.

6
ответ дан 1 December 2019 в 01:39
поделиться

Найденный им самостоятельно:

Windows действительно смотрит в Каталоге приложения сначала: Если SafeDllSearchMode включают, поисковый порядок следующие:

  1. каталог, от который загруженное приложение.
  2. системный каталог. Используйте функцию GetSystemDirectory для получения пути этого каталога.
  3. 16-разрядный системный каталог. Нет никакой функции, которая получает путь этого каталога, но он ищется.
  4. каталог Windows. Используйте функцию GetWindowsDirectory для получения пути этого каталога.
  5. текущий каталог.
  6. каталоги, которые перечислены в переменной окружения PATH. Обратите внимание, что это не включает путь на приложение, указанный ключом реестра путей приложения. Ключ путей приложения не используется при вычислениях пути поиска DLL.

, Если SafeDllSearchMode отключен, поисковый порядок следующие:

1. Каталог, от который загруженное приложение. 2. Текущий каталог. 3. Системный каталог. Используйте функцию GetSystemDirectory для получения пути этого каталога. 4. 16-разрядный системный каталог. Нет никакой функции, которая получает путь этого каталога, но он ищется. 5. Каталог Windows. Используйте функцию GetWindowsDirectory для получения пути этого каталога. 6. Каталоги, которые перечислены в переменной окружения PATH. Обратите внимание, что это не включает путь на приложение, указанный ключом реестра путей приложения. Ключ путей приложения не используется при вычислениях пути поиска DLL.

согласно: http://msdn.microsoft.com/en-us/library/ms682586.aspx

, Но можно перенаправить, где это ищет использование .dll Декларации:

http://msdn.microsoft.com/en-us/library/aa375365 (По сравнению с 85) .aspx

5
ответ дан 1 December 2019 в 01:39
поделиться

Это может быть вид путания, потому что каждая версия окон, правила изменяются. Более старые версии Windows ищут путь перед текущим каталогом.

простое решение А без деклараций:

, Если Ваш исполняемый файл A.EXE, добавьте (0 байтов, пустых) файл в том же каталоге, названном A.EXE.local - для более старых версий Windows, это помещает каталог приложения перед путем в поисковом порядке.

5
ответ дан 1 December 2019 в 01:39
поделиться