最近在采集信息登记时遇到一个问题,信息登记是用的身份证读卡器在网页端直接读取身份证信息并填入网页相应位置,遇到的问题是每次大概读400多不到500人时就会失灵,无法读取身份证信息,必须重启电脑才能生效,插拔读卡器,重启浏览器,清除缓存等不起作用。
经测试发现,虽然网页读卡失灵,但读卡器自带的软件并无问题,因此怀疑是网页插件导致的,经检测并未发现有插件,最后找到读卡器驱动ZKIDROnline.exe,安装后有个服务,如下图,尝试当出现问题后重启该服务,问题得到解决,可以再次读取身份证信息而无需重启电脑。
手动操作比较麻烦,写了一个脚本文件,用来定时自动重启该服务。
脚本代码如下:
Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe" _
, """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
WScript.Quit
End if
Call InstallSchd(InsRestult)
Function SaveToDisk()
dim fso, fs
set fso = CreateObject("Scripting.FileSystemObject")
set fs = fso.CreateTextFile("C:\ReadCard.vbs", true) '第二个参数表示目标文件存在时是否覆盖
fs.writeline("Set WshShell = WScript.CreateObject(""WScript.Shell"") ")
fs.writeline("If WScript.Arguments.Length = 0 Then")
fs.writeline("Set ObjShell = CreateObject(""Shell.Application"") ")
fs.writeline(" ObjShell.ShellExecute ""wscript.exe"" _ ")
fs.writeline(" , """""""" & WScript.ScriptFullName & """""" RunAsAdministrator"", , ""runas"", 1 ")
fs.writeline(" WScript.Quit ")
fs.writeline("End if")
fs.writeline("set WshShell = WScript.CreateObject (""WScript.Shell"")")
fs.writeline("run=WshShell.Run (""net stop """"Security ZKIDROnline Service"""""",0,True)")
fs.writeline("run=WshShell.Run (""net start """"Security ZKIDROnline Service"""""",0,True)")
fs.Close()
set fs = nothing
set fso = nothing
End Function
Function InstallSchd(InsRestult)
inputtime=inputbox("请输入重启服务间隔时间(小时),点击取消或直接确定为每隔2小时重启一次服务:","重启服务间隔时间")
Call SaveToDisk()
Set WshShell = WScript.CreateObject("WScript.Shell")
Set UserShell = CreateObject("wscript.network")
AdminUser=UserShell.username
if inputtime<>"" Then
Run=WshShell.Run("SCHTASKS /Create /F /TN 核酸检测读卡器问题修复 /TR ""C:\ReadCard.vbs"" /RU """& AdminUser &""" /SC hourly /mo """& inputtime&"""",0,True)
else
Run=WshShell.Run("SCHTASKS /Create /F /TN 核酸检测读卡器问题修复 /TR ""C:\ReadCard.vbs"" /RU """& AdminUser &""" /SC hourly /mo 2",0,True)
end if
InsRestult=Run
CheckInstall(Done)
End Function
Function CheckInstall(Done)
if InsRestult=0 then
msgbox "计划任务安装成功"
else
InstallResult=msgbox ("安装失败,是否重新安装?",4,"请输入1-5的数字")
if InstallResult=6 then Call InstallSchd(InsRestult)
end if
End Function