那是风华 發表於 2020-8-19 21:25:51

vbs提示没有在该机执行windows脚本宿主的权限。请与系统管理员联系

<p>最近在项目中使用VBS来实现图片的批量删除和批量导入功能,但不知道为什么,只要在我机器上一运行VBS文件就提示“没有在该机执行windows脚本宿主的权限。请与系统管理员联系。”的错误。下面贴出本人的解决方法,并附上图片批量导入及批量删除的VBS代码。</p>
<p>如果只是因为权限问题可以查看这篇文章:</p>
<p><a target="_blank" href="https://www.jb51.net/article/29233.htm">以管理员身份运行程序的vbs命令</a></p>
<p>1、检查系统是否禁止使用了脚本运行,即打开“INTERNET选项”的“安全”选项卡里“自定义级别”,看看“ActiveX空件及服务”禁用的选项。<br />
2、运行 regsvr32 scrrun.dll,即打开运行输入CMD,输入regsvr32 scrrun.dll,再回车。<br />
3、最关键的一步,即看看注册表里的这个位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings在右边的窗口中是不是有个名为 Enabled的DWORD键值,有的话把它删除或者把值该为 1 即可。<br />
4、重新运行VBS文件即将正常。</p>
<p><strong>VBS批量导入图片功能 </strong></p>
<div class="jb51code">
<pre class="brush:ps;">
'****************** Const ****************
'---- CuRsorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- CuRsorLocationEnum Values ----
Const adUseServer = 2
Const adUseClient = 3

'---- Custom Values ----
Const cuDSN = "test"

Const cuUsername = "sa"
Const cuPassword = ""

'*************** main sub ******************

Call ImageExport()

'*************** define function ***********

Function ImageExport()
'on error resume next
Dim sSQL,Rs,Conn,sfzRs,sFilePath,sImgFile,xml
Dim Ados,fso,f,oShell,sErrFile,sSucFile,iErr,iSuc
Set fso = CreateObject("Scripting.FileSystemObject")

    ' Create Stream Object
set Ados=CreateObject("Adodb.Stream")
    Ados.Mode=3
    Ados.Type=1

Set Conn=CreateObject ("adodb.Connection")
Conn.CuRsorLocation =adUseClient
Call Init_Connection(Conn)
Set Rs=CreateObject ("adodb.recordset")
Set sfzRs=CreateObject ("adodb.recordset")

sFilePath=WScript.ScriptFullName
sFilePath=left(sFilePath,len(sFilePath)-len(WScript.ScriptName))
ssql="SELECT RYBH, PHOTO FROM TP_ZPXX WHERE (RYBH IN (SELECT DISTINCT RYBH FROM TP_BMKM WHERE (KSZQBH = 18) AND (JFBZ = 1)))"
sfzRs.Open sSQL,Conn,adOpenForwardOnly
iSuc=sfzRs.RecordCount

'Get SFZH From DataBase and import images
while not sfzRs.EOF
    sImgFile= sFilePath &amp; sfzRs("RYBH") &amp; ".jpg"
    Ados.Open   
    Ados.Write (sfzRs("PHOTO").GetChunk(4500000))   
    Ados.SaveToFile sImgFile,1   
    sfzRs.MoveNext   
    Ados.Close
wend

sfzRs.Close
Conn.Close

'Release Object
set Rs=nothing:set sfzRs=nothing:set Conn=nothing:set Ados=nothing

msgbox iSuc &amp; "张照片导出成功",64 ,"照片导出"
   


'Quit
WScript.Quit

End Function

Function Init_Connection(Conn)
on error resume next
ConnStr = "Provider=SQLOLEDB;Data Source=192.168.64.114;" &amp; _
      "Initial Catalog=VoteInfo;User Id=sa;Password=123456;timeout=50"
Conn.Open ConnStr

If Err.number Then   
    msgbox "数据库联接失败",16 ,"照片导出"
    exit function
End If
End Function</pre>
</div>
<p><strong>VBS批量删除图片功能</strong></p>
<div class="jb51code">
<pre class="brush:ps;">
'****************** Const ****************
'---- CuRsorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- CuRsorLocationEnum Values ----
Const adUseServer = 2
Const adUseClient = 3

'---- Custom Values ----
Const cuDSN = "test"

Const cuUsername = "sa"
Const cuPassword = ""

'*************** main sub ******************

Call ImageExport()

'*************** define function ***********

Function ImageExport()
'on error resume next
Dim sSQL,Rs,Conn,sfzRs,xml
Dim Ados,fso,f,oShell,sErrFile,sSucFile,iErr,iSuc'iSuc 文件总数
Dim PicPath,PhysicPath,DelCount '删除文件数
Set fso = CreateObject("Scripting.FileSystemObject")

    ' Create Stream Object
set Ados=CreateObject("Adodb.Stream")
    Ados.Mode=3
    Ados.Type=1

Set Conn=CreateObject ("adodb.Connection")
Conn.CuRsorLocation =adUseClient
Call Init_Connection(Conn)
Set Rs=CreateObject ("adodb.recordset")
Set sfzRs=CreateObject ("adodb.recordset")

sSQL="select sPath,sFile from ScanFile"
sfzRs.Open sSQL,Conn,adOpenForwardOnly
iSuc=sfzRs.RecordCount

'Get SFZH From DataBase and import images
while not sfzRs.EOF
    PhysicPath="E:\VBS删除照片小程序" '物理路径   
    Ados.Open   
    PicPath =PhysicPath &amp; sfzRs("sPath") &amp;"\" &amp;sfzRs("sFile")   
    If (fso.FileExists(PicPath)) Then
      fso.DeleteFile(PicPath)
      DelCount=DelCount+1
    end if   
    sfzRs.MoveNext   
    Ados.Close
    if iSuc-DelCount=iSuc Then
      DelCount=0
    end if   
wend

sfzRs.Close
Conn.Close

'Release Object
set Rs=nothing:set sfzRs=nothing:set Conn=nothing:set Ados=nothing:set fso=nothing

msgbox "共需要删除" &amp; iSuc &amp; "张照片,其中" &amp; DelCount &amp; "张照片删除成功," &amp;iSuc-DelCount &amp; "张照片未找到!",64 ,"照片删除"
   


'Quit
WScript.Quit

End Function

Function Init_Connection(Conn)
on error resume next
ConnStr = "Provider=SQLOLEDB;Data Source=192.168.64.114;" &amp; _
      "Initial Catalog=VoteInfo;User Id=sa;Password=123456;timeout=50"
Conn.Open ConnStr

If Err.number Then   
    msgbox "数据库联接失败",16 ,"照片删除"
    exit function
End If
End Function</pre>
</div>
頁: [1]
查看完整版本: vbs提示没有在该机执行windows脚本宿主的权限。请与系统管理员联系