强制终止 WIA 或 TWAIN 驱动程序(扫描仪)
Posted
技术标签:
【中文标题】强制终止 WIA 或 TWAIN 驱动程序(扫描仪)【英文标题】:Force terminate WIA or TWAIN driver (scanner) 【发布时间】:2019-01-28 19:05:40 【问题描述】:我遇到了一个非常烦人的问题。当我尝试静默安装程序时,该程序取决于未“使用”的 WIA 或 TWAIN 驱动程序(用于扫描仪)。问题是即使从计算机上拔下扫描仪后驱动程序仍可能“正在使用”(如果之前已插入,则驱动程序已使用并且拔出后不会停止使用)
我的问题是,据您所知,是什么控制着这个 WIA / TWAIN 驱动程序?它是我可以强制关闭的服务还是流程?
我为 WIA 找到了这 2 项服务:
stisvc WiaRpc
但与 TWAIN 无关。
我的目标是在安装脚本中添加强制关闭,以确保在安装之前 WIA 或 TWAIN 无法使用。
【问题讨论】:
TWAIN 基于 TwainDSM.dll(DSM=Data Source Manager)。因此,如果一个应用程序想要查看哪些 TWAIN 扫描仪/驱动程序可用或与其中一个交互,它必须获得该 DLL 上的文件句柄。因此,检查没有人在使用该 DLL 将是执行此操作的最简单方法。请注意,根据您的体系结构(32 位或 64 位),DLL 位于不同的位置。虽然不知道WIA。也许this 有帮助。 伟大的评论为我指明了正确的方向。请参阅下面的答案以获取最终解决方案。非常感谢!有时会忘记 Dll ;) 【参考方案1】:我找到了解决方案,可能对其他遇到这些驱动程序问题的人有用。首先下载SysInternals的ListDlls: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
解释:
-停止负责WIA(Windows Image Acquisition (WIA))的服务STISVC
-在 TWAINDSM.DLL 上运行 ListDlls.exe,通过选择找到的程序的 PID 来找出正在使用 dll 的内容。
-如果命令成功(换句话说,如果找到了 PID,意味着程序正在使用该 DLL),则拆分内容,以便您可以仅隔离 PID 号。
-用它的 PID 停止进程,这样 TWAIN 就不再使用了
您现在已经停止使用 WIA 或 TWAIN,可以继续安装需要这些驱动程序不使用的驱动程序或软件!干杯。
【讨论】:
要求用户退出这些程序会更好一些。虽然我不知道这件事的来龙去脉。 这是一个静默部署的上下文,任何东西都可以关闭;)以上是关于强制终止 WIA 或 TWAIN 驱动程序(扫描仪)的主要内容,如果未能解决你的问题,请参考以下文章
需要信息 TWAIN 和 WIA 驱动程序来扫描 C# 中的图像?