как связать зависимости в exe - PullRequest
2 голосов
/ 29 апреля 2011

Часто у моего exe-файла есть зависимости dll, которые я упаковываю с помощью установщика, например nsis или inno .Это имеет смысл для больших программ, но излишне для небольших сценариев.

Есть ли альтернативный способ связывания зависимостей, так что пользователь может просто выполнить один exe-файл и не требовать каталог dll в PATH?


РЕДАКТИРОВАТЬ

Я надеюсь на решение, которое не будет зависеть от типа DLL, и будет работать для другихвиды зависимостей тоже.

Вот несколько возможных вариантов:

У кого-нибудь есть опыт работы с таким инструментом?

Ответы [ 5 ]

2 голосов
/ 30 апреля 2011

Хорошо, вам не понравилась ни одна из моих двух других идей ... так что вот так ...

Вы отправляете и даете своим клиентам "EXE-заглушку". Заглушка EXE не зависит от чего-либо еще и просто содержит ZIP-файл (или установочный пакет или аналогичный) в качестве ресурса в вашем заглушке EXE. ZIP-файл, встроенный в заглушку EXE, содержит только саму программу EXE и все ее зависимые библиотеки DLL. Когда исполняется заглушка EXE, она просто распаковывает ZIP-файл в подкаталог TEMP и запускает приложение EXE.

Вы можете оптимизировать его так, чтобы, если приложение уже было установлено в% TEMP%, вы пропустили этап распаковки и просто запустили уже существующий EXE-файл приложения.

Лично я бы не пошел по этому пути. Просто дайте пользователю установщик, если у EXE есть зависимости. Но вы знаете своих пользователей и клиентов лучше, чем я.

2 голосов
/ 29 апреля 2011

Вы можете статически связать исполняемый файл.

1 голос
/ 29 апреля 2011

Вы не упомянули, что такое зависимости DLL. Просто прямые библиотеки DLL с заглушкой lib? Динамически загружается через LoadLibrary? COM? Требуется регистрация? Что-нибудь из этого .NET?

Несколько вариантов для рассмотрения.

  1. Поместите все необходимые библиотеки DLL в ту же директорию, что и EXE (чтобы вам не приходилось смешивать переменную PATH). Установка - это просто «копирование *. *» Или только разрешение на запуск из общей папки. (YMMV, если есть код .NET - поскольку он имеет ограничение безопасности при запуске из удаленного общего файлового ресурса).

  2. Статически связать EXE-файл с C-Runtime вместо динамического параметра (поэтому вам не нужно повторно распространять MSVCRT на машинах, на которых он еще не установлен).

У меня есть несколько сумасшедших идей, если двух вышеперечисленных пунктов недостаточно. Дайте мне знать.

1 голос
/ 29 апреля 2011

Одной из альтернатив является установка DLL в GAC.

0 голосов
/ 29 апреля 2011

Очевидно, существует программное обеспечение , которое может преобразовывать DLL в LIB, чтобы вы могли статически ссылаться на нее, но в этом случае это может быть излишним.

...