-1

Чтобы помочь с переносом приложений из устаревших операционных систем (например, XP), мне нужно идентифицировать файлы драйверов (sys), на которые опирается приложение для запуска. Это должно быть сделано путем проверки существующей системы с установленным приложением, без запуска установщика и без запуска приложения.

Хотя это и не идеальное решение, была предпринята попытка идентифицировать готовые драйверы (драйверы, добавленные после установки операционной системы), поскольку это сузит число файлов sys, которые следует учитывать. DISM API может возвращать состояние «Входящие» драйвера, но для этого требуется Windows 7 и выше.

До сих пор надежное решение оказалось уклончивым на XP. Возможно, что запрос метаданных временной метки NTFS (например, измененных) поможет определить файлы sys, которые были добавлены в файловую систему с момента установки операционной системы. Даже в случае успеха это только сужает область исследования, но фактически не определяет драйверы, от которых зависит приложение.

Я задал подобный вопрос здесь.

Итак, как статически определить файлы sys, от которых зависит приложение?

1 ответ1

0

Это заблуждение: ни одна программа не "зависит" от файлов .sys или драйверов. Это зависит только от операционной системы, и операционная система использует любые модули, которые кажутся подходящими.

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

На другом вашем посте вам посоветовали использовать Dependency Walker, который скажет вам, какие DLL вызывает программа. На целевом компьютере вам необходимо убедиться, что какая-то версия этих DLL доступна.

Некоторые библиотеки DLL, такие как kernel32.dll являются неотъемлемой частью Windows и будут существовать в любой версии Windows.

Другие библиотеки DLL, относящиеся, например, к .Net Framework или среде выполнения C/C++, могут быть установлены или не быть установлены на целевом компьютере, и вам также может потребоваться установить правильную версию.

Хотя .Net Framework имеет обратную совместимость, то есть более высокая версия будет работать для программы, скомпилированной с более низкой версией, среде выполнения C/C++ требуется точная версия, поэтому вам может потребоваться распространять библиотеки DLL вместе с вашим продуктом.

Для этого создан термин: DLL Hell, который полностью подходит. Как разработчику, вам нужно будет протестировать ваше распределенное программное обеспечение в максимально возможном количестве сред, чтобы минимизировать этот ад. Но будьте уверены, что рано или поздно вы столкнетесь с этим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .