今天有人问我,为什么他的VBS脚本在64位Windows 7中用VbsEdit可以直接执行,但是直接双击就会出错:ActiveX 部件不能创建对象: ‘MSWinsock.Winsock’。

在64位系统中存在两组不同的wscript.exe和cscript.exe,一组是64位的,在C:\Windows\System32文件夹;一组是32位的,在C:\Windows\SysWOW64文件夹。由于64位和32位的内存模式不同,64位进程无法加载32位DLL,故以DLL封装COM组件无法在64位进程调用。

具体到上面的问题,MSWinsock.Winsock是32位COM组件,而直接双击运行VBS文件默认是以C:\Windows\System32\wscript.exe为宿主的,也就是64位的进程,64位进程无法加载32位的DLL,所以会出现“ActiveX 部件不能创建对象”的错误。如果想不报错的话需要手动指定用32位的宿主来执行。

那为什么用VbsEdit可以直接执行呢?因为早期版本的VbsEdit在64位系统上会自动调用32位的wscript.exe或者cscript.exe来执行脚本。对于比较新的VbsEdit,已经区分为32位的VbsEdit何64位的VbsEdit,不同版本的VbsEdit会调用对应版本的wscript.exe或者cscript.exe来执行。

怎样才能在64位系统里直接双击运行包含32位COM组件调用的VBS脚本呢?一种方法是改注册表,但是这个方法不通用;另一种方法是在VBS代码中做检测:

Option Explicit

Run32()

DimWinsock

SetWinsock = CreateObject("MSWinsock.Winsock")

MsgBox"成功创建MSWinsock.Winsock对象"

SubRun32()

'Author: Demon

'Date: 2015/7/9

'Website: http://demon.tw

DimstrComputer, objWMIService, colItems, objItem, strSystemType

strComputer ="."

SetobjWMIService = GetObject("winmgmts:\\"& strComputer &"\root\cimv2")

SetcolItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)

For EachobjItemincolItems

strSystemType = objItem.SystemType

Next

IfInStr(strSystemType,"x64") >0Then

Dimfso, WshShell, strFullName

Setfso = CreateObject("Scripting.FileSystemObject")

SetWshShell = CreateObject("WScript.Shell")

strFullName = WScript.FullName

IfInStr(1, strFullName,"system32",1) >0Then

strFullName =Replace(strFullName,"system32","SysWOW64",1,1,1)

WshShell.Run strFullName &" "&_

""""& WScript.ScriptFullName &"""",10,False

WScript.Quit

End If

End If

End Sub

随机文章:

这篇文章发布于 2015年07月9日,星期四,12:38,归类于 程序设计。您可以跟踪这篇文章的评论通过 RSS 2.0 feed。

您可以留下评论,或者从您的站点trackback。

64位matlab调用 com组建,64位系统VBS调用32位COM组件相关推荐

  1. 64位系统VBS调用32位COM组件

    64位系统VBS调用32位COM组件 标签: 32位, 64位, COM, COM组件, VB, VBS, VBScript 标题: 64位系统VBS调用32位COM组件 作者: Demon 链接:  ...

  2. 你为什么需要在64位系统下用32位程序

    在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...

  3. 64位系统下用32位程序

    在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...

  4. 在64位操作系统上运行32位的程序

    运行 32 位程序 WOW64 子系统使 32 位程序能够在基于 x64 版本的 Windows Server 2003 和 Windows XP 专业 x64 版的运行而不用修改.WOW64 子系统 ...

  5. 骁龙660是32位还是64位_微软公布v2004最低处理器要求,放弃32位系统,你的CPU还能支持吗?...

    最近关于win10 20H1(win10更新五月版)的消息铺天盖地席卷而来,据说只有开发者用户可以先行在MSDN订阅网站下载该版本的ISO镜像文件,对于主流消费者而言,预计要再煎熬等到28日. 而且微 ...

  6. 64位系统下一个32位的程序究竟可以申请到多少内存?

    64位系统下一个32位的程序究竟可以申请到多少内存? cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设 ...

  7. Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...

    1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o 2.linux 系统c语言生成.so文件,----->gcc -sh ...

  8. 64位系统上运行32位程序的内存限制

    64位系统上运行32位程序能否申请到8G内存? 收藏到手机    转发   评论 2010-01-20 10:56 申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来 ...

  9. 怎样在64位安卓系统中使用32位SO库 2

    之前跟的项目, 那些号称64位 CPU的主控, 跑的软件全是 32位的: 我仍然很清楚的记得, 当年 CEO 在给大家讲解财报,描述技术蓝图的时候, 宣称 64bit 软件的运行效率其实远不如预期, ...

  10. 64位操作系统(WIN10)+32位LabVIEW(2020)+64位MySQL,Windows10系统下用32位ODBC连接MySQL

    1.首先得安装"Connector/ODBC",就是MySQL的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是X64还是X86,只要你的应用 ...

最新文章

  1. LeetCode简单题之唯一摩尔斯密码词
  2. 8GB内存的树莓派4来啦!国内售价589元,官方还推出配套64位系统
  3. YARN的内存和CPU配置优化
  4. python websocket server 解决中文乱码
  5. centos6.8 如何编译php,centos 6.8 安装编译php7.1.2
  6. Java程序设计 图形用户界面 小巫版简易计算器
  7. Web前端技术历经的洗礼和蜕变
  8. docker fdfs修改storage ip
  9. C#之正则表达式、异常处理和委托与事件
  10. Python+pywin32批量转换Word文件为PDF文件
  11. 修改 exchange服务器,修改或删除 Exchange 2010
  12. 服务器安全,服务器密码遭篡改
  13. SpreadJS 纯前端表格控件应用案例:立信智能审计云平台(SACP)
  14. 修改 exchange服务器地址,绑定exchange邮箱服务器地址
  15. 记录一下之前写的文章--测试之不可承受之轻
  16. java.acp是什么,ACP是什么?看这一篇就够啦
  17. 【日志篇】java日志的桥接器和适配器和异步日志
  18. User-Agent结构介绍及主流浏览器User-Agent大全
  19. 计算机二级mysql考试经验分享(2021年3月)
  20. 关于3G手机USIM卡的电话簿

热门文章

  1. 刚刚Teradata的高管们说,“TA是唯一”……
  2. 信息增益matlab实现,信息增益matlab实现
  3. idea手动刷新git分支
  4. CreateThread与_beginthreadex
  5. 可伸缩性和重/轻量,谁是实用系统的架构主选
  6. 海昇智:想提升拼多多店铺权重商家该怎么做?
  7. 笔记本硬盘.20190225
  8. kali破解wifi密码(wpa/wpa2)
  9. 面向对象之老张开车去东北
  10. Android实现简单的加法器,加法器的实现