[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 强制VBS以32位模式运行,修正VBS在64位系统下“ActiveX部件不能创建对象”错误

名称:强制 VBS 以 32 位模式运行
功能:修正 VBS 在 Windows 7 等 64 位系统中无法调用32位组件的问题
  1. RunAsX64
  2. Test
  3. Sub Test()
  4.   Set sc = CreateObject("ScriptControl")    ' 64 位模式下提示:ActiveX部件不能创建对象:'ScriptControl'
  5.   sc.Language = "javascript"
  6.   t = sc.eval("new Date().getTime()")
  7.   Msgbox t
  8. End Sub
  9. ' RunAsX64() By Yu2n
  10. ' 64位系统下强制以32位模式运行脚本
  11. ' 示例:在代码开头加上 RunAsX64 ...
  12. Sub RunAsX64()
  13.   On Error Resume Next
  14.   If InStr(1,WScript.FullName,"\SysWOW64\",vbTextCompare) > 0 Then Exit Sub
  15.   Dim wso, sCommand, sArgs
  16.   Set wso = CreateObject("WScript.Shell")
  17.   If wso.Run("cmd /c set ProgramFiles|find /i ""x86"" ",0,True) = 0 Then
  18.     If Err.Number = 0 Then
  19.       sCommand = "%windir%\SysWOW64\cscript.exe //NoLogo """ & WScript.ScriptFullName & """"
  20.       For Each oArg In WScript.Arguments
  21.         sArgs = sArgs & " " & """" & oArg & """"
  22.       Next
  23.       wso.Run sCommand & sArgs, 1, False
  24.       WScript.Quit
  25.     End If
  26.   End If
  27. End Sub
复制代码
  1. ' Is64OS() By Yu2n
  2. ' 示例:If Is64OS() = True Then ...
  3. ' Ps: 已堕落到不执着于 “纯” VBS
  4. Function Is64OS()
  5.   On Error Resume Next
  6.   Is64OS = False
  7.   Set wso = CreateObject("WScript.Shell")
  8.   If wso.Run("cmd /c set ProgramFiles|find /i ""x86"" ",0,True) = 0 Then
  9.     If Err.Number = 0 Then Is64OS = True
  10.   End If
  11. End Function
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

64 位系统使用组件很尴尬
64 位运行时不支持 tli 等 32 位组件,而以 32 位运行时,(new ActiveXObject('Shell.Application')).Windows() 得到的结果不能正常解析

TOP

回复 2# CrLf
囧,那就看情况编写代码吧。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

返回列表