强制终止 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# 中的图像?

使用 WIA 或 TWAIN 扫描页面

设置 TWAIN 扫描的分辨率

C# 应用程序的 WIA/TWAIN 包装器类? [关闭]

在 TWAIN 中是不是可以强制扫描仪将区域设置为整个宽度?

在 .NET 中使用 TWAIN - 寻找资源 [关闭]