Принудительно завершить работу драйвера WIA или TWAIN (сканер)

У меня довольно неприятная проблема. Когда я пытаюсь установить программу в автоматическом режиме, эта программа зависит от того, НЕ используется ли драйвер WIA или TWAIN (для сканеров). Проблема в том, что драйвер может «использоваться» даже после того, как сканер отключен от компьютера (если он был подключен раньше, драйвер используется и не перестает использоваться после отключения)

У меня вопрос, насколько вам известно, что контролирует этот драйвер WIA / TWAIN? Это услуга, которую я могу принудительно закрыть, или процесс?

Я нашел эти 2 сервиса для WIA:

stisvc
WiaRpc

но ничего по поводу TWAIN.

Моя цель - добавить это принудительное закрытие в сценарий установки, чтобы убедиться, что WIA или TWAIN не могут использоваться вообще перед установкой.


person Rakha    schedule 22.08.2018    source источник
comment
TWAIN основан на TwainDSM.dll (DSM = Data Source Manager). Поэтому, если приложение хочет видеть, какие сканеры / драйверы TWAIN доступны или взаимодействовать с ними, ему необходимо получить дескриптор файла для этой DLL. Так что проверка того, что никто не использует эту DLL, будет самым простым способом сделать это. Имейте в виду, что в зависимости от вашей архитектуры (32-разрядная или 64-разрядная) DLL находится в другом месте. Хотя понятия не имею о WIA. Возможно, это поможет.   -  person Steffen Winkler    schedule 22.08.2018
comment
Отличный комментарий, который указал мне правильное направление. См. Ответ ниже для окончательного решения. Большое спасибо! Иногда забываешь про Dll;)   -  person Rakha    schedule 22.08.2018


Ответы (1)


Я нашел решение, может быть полезно для других людей, у которых есть проблемы с этими драйверами. Сначала загрузите ListDlls от SysInternals: https://docs.microsoft.com/en-us/sysinternals/downloads/listdlls

Затем с помощью PowerShell:

Stop-Service -Name stisvc -Force

[string]$twain_utilise = C:\TEMP\Listdlls.exe -d TwainDSM.dll | select-string "pid"

if ($twain_utilise) {
$processus = ($twain_utilise -Split(": "))[1]
} 

Stop-Process -id $processus -Force

Объяснение :

-Остановите службу STISVC, отвечающую за WIA (Windows Image Acquisition (WIA)).

-Запустите ListDlls.exe на TWAINDSM.DLL, чтобы узнать, что использует dll, выбрав PID найденной программы.

-Если команда была успешной (другими словами, если PID был найден, что означает, что программа IS использует эту DLL), разделите содержимое, чтобы вы могли изолировать только номер PID.

-Остановить процесс с его PID, чтобы TWAIN больше не использовался

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

person Rakha    schedule 22.08.2018
comment
Хотя было бы немного лучше попросить пользователя выйти из этих программ. Хотя я не знаю контекста этого. - person Steffen Winkler; 22.08.2018
comment
Это контекст, в котором он развертывается незаметно, и все может быть закрыто;) - person Rakha; 22.08.2018