2

Программа установила c:/windows/syswow64/msxml4.dll на мой жесткий диск. К сожалению, это старая версия (4.30.2100.0) с проблемой безопасности, поэтому я действительно хочу удалить файл и программу, которая его установила.

MSXML4 нет в списке программ, которые я могу удалить в разделе "Программы и компоненты". Есть ли способ найти программу, которая установила его в Windows 8.1?

Надеюсь, что некоторые из вас могут помочь.

3 ответа3

3

Нахождение зависимостей

Как предлагает @DavidMarshall, вы можете использовать Dependency Walker:

Dependency Walker - это бесплатная утилита, которая сканирует любой 32-битный или 64-битный модуль Windows (exe, dll, ocx, sys и т.д.) И строит иерархическую древовидную схему всех зависимых модулей. Для каждого найденного модуля в нем перечислены все функции, которые экспортируются этим модулем, и какие из этих функций фактически вызываются другими модулями.

Источник: Зависимость Уокер

Однако, если у вас много программ, пройти все из них невозможно. Другой подход - открыть командную строку с повышенными привилегиями и выполнить следующую команду:

type nul>"%temp%\find.txt" & for /r "%systemdrive%\" %G in (*.exe;*.dll) do @find /i "msxml4.dll" "%~fG" >nul 2>&1 && echo %~fG>>"%temp%\find.txt"

Команда выполняет рекурсивное сканирование содержимого каждого файла приложения и библиотеки, доступного на системном диске, в поисках строк msxml4.dll регистра.

Результаты хранятся в файле find.txt расположенном во временной папке пользователя. Он не идеален (см. Ниже), но может дать вам несколько советов.

замечания

  • Команда find предназначена для текстовых файлов. Хотя это также работает для двоичных файлов, некоторые экземпляры могут быть пропущены в зависимости от того, как они хранятся. Права доступа к файлам также могут помешать сканированию определенных файлов.

  • Если у вас есть программы, которые не установлены на системном диске, вы можете еще раз выполнить приведенную выше команду и указать соответствующую букву диска.

  • Вы можете включить другие расширения, такие как:

    .cpl = Control panel item
    .ocx = ActiveX control
    .scr = Screen saver
    .sys = System file (e.g. device drivers)
    

дальнейшее чтение

2

Это то, что я придумал для сканирования с помощью powershell. Я новичок в powershell, так что это может быть не красиво, но это работает.

$hostName     = hostname

$appFilePath  = "C:\Windows\Temp\DLL_$hostName.csv"

$scanPath     = 'C:\'

$exefile      = "*.exe"

$dllFile      = "*.dll"

Следующее создает список всех DLL и EXE-файлов на c $:

$dll = dir -ErrorAction SilentlyContinue -Recurse -Path $scanPath -Include @($exefile, $dllFile)

Далее рассматривается каждый файл, чтобы увидеть, ссылается ли он на MSXML4.dll. Занимает около 30 минут на моих 149 ГБ данных:

$dll | Select-String "msxml4.dll" -ErrorAction SilentlyContinue | group $($_.name) | select name | export-csv -path $appFilePath`

Вывод не отформатирован, поэтому вы получите что-то вроде:

C:\Windows\SysWOW64\migwiz\unbcl.dll:45:Cclass UnBCL::TimeSpan __thiscall UnBCL::TimeSpan::Add(const class UnBCL::TimeSpan &) constresult of TimeSpan additio..... and so on 

unbcl.dll есть на каждой машине, которую я сканировал, и ее можно игнорировать. Я думаю, что он просто ищет MSXML4.dll, даже если он не на машине.

Вы также получите отличные вещи, как это:

"C:\Users\USERX\Documents\Toad for Oracle 10.1 - R2 Commercial.exe:5045:File_Name=""msxml4.dll"" "
0

Лучше было бы добавить windows\system32 и / или windows\syswow64

Например:

тип

nul>"%temp%\find.txt" & for /r "%systemdrive%\windows\syswow64" %G in (*.exe;*.dll) do @find /i "msxml4.dll" "%~fG" >nul 2>&1 && echo %~fG>>"%temp%\find.txt"

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