Windows Установщик развертывания не включает в себя зависимости? - PullRequest
0 голосов
/ 28 января 2020

Примечание: этот пост является продолжением моей проблемы вчера . Вчера я ошибочно пытался развернуть в режиме отладки. Изменение, которое исправило ряд проблем, но создало сегодняшнюю проблему:

Я сейчас развертываю (на основе это руководство ) режим выпуска в многопоточном режиме DLL, так как некоторые из моих внешние зависимости требуют DLL. Новая проблема заключается в том, что мой установщик больше не упаковывает и не развертывает требуемые библиотеки DLL (по крайней мере вчера «обнаруженные зависимости» упаковывались / появлялись в папке программы каждый раз). Сегодня программа пропускает вчерашнюю ошибку, но сообщает мне, что (не отладочные) библиотеки DLL отсутствуют. Копирование вручную тех, которые были запрошены, решило проблему и отлично запустило программу.

Поэтому я обратил свое внимание на попытку автоматического развертывания библиотек DLL. Иногда, но, как ни странно, в большинстве случаев эти требуемые библиотеки DLL отображаются в списке «обнаруженных зависимостей». Независимо от того, появляются они или нет, они никогда не упаковываются и не отображаются в моей папке установки. Если они появились, список исчезает после сборки, как показано на следующих двух снимках экрана:

the list of dependencies pre-build. Arrows indicate the ones that the program would ask for on the target computer

post-build does not report any dll's having been packaged, and dependency list is now empty

Единственное исправление, которое я нашел до сих пор , - это ручное добавление этих зависимостей в основную папку приложения вывода:

Manually adding dependencies

Я доволен этим решением в оперативном плане, так как сейчас оно прекрасно работает, но я чувствую, что это все еще обходной путь. Я считаю, что это решение работает только до тех пор, пока я вручную учел все зависимости, что основано на том, как я решил включить этот список вручную. До того, как какие-либо зависимости были упакованы, запуск программы сообщал мне заранее, что два отсутствовали. Как только я добавил их, программа успешно запустилась, но на полпути вызвала ошибку, когда отсутствовала «зависимость второго уровня». А именно, k4a.dll, который я скопировал вручную, похоже, требует depthengine_2_0.dll при каком-то конкретном c вызове функции. Если бы я не сталкивался с этим вызовом функции в моем консольном приложении (например, взял другое меню), я бы проигнорировал эту зависимость.

Так что здесь необходимо одно из следующих действий:

  • Способ автоматического определения и включения зависимостей. Кажется, что Windows Установщик через VS должен быть способен на это, но что-то изменилось между вчера и сегодня. Или;
  • Комплексный способ определения всех зависимостей, которые понадобятся на любом возможном этапе программы, чтобы я мог вручную включить их. Зависимость Уокер, например, не выявил необходимость в depthengine_2_0.dll, как показано ниже:

Dependency walker does not identify the need for depthengine, which was manually found to appear partway through the program's operation.

Обновление : После перенастройки моего проекта все немного изменилось. Теперь тот же список обнаруженных зависимостей из рис. 1 все еще только иногда обнаруживается. Но когда это так, оно на самом деле упаковано и включено. Обратите внимание, что в автоматически обнаруживаемом списке отсутствуют две зависимости, которые я включил вручную после того, как обнаружил, что они необходимы. Таким образом, список генерируется только иногда, не включает в себя все необходимые зависимости и может включать в себя ненужные.

...