如何在64位计算机上以32位模式运行VBScript?

Pet*_*ter 47 provider vbscript 64-bit 32-bit adodb

我有一个以.vbs结尾的文本文件,我在下面写了:

Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "Microsoft.ACE.OLEDB.12.0"
Conn.Properties("Data Source") = "C:\dummy.accdb"
Conn.Properties("Jet OLEDB:Database Password") = "pass"
Conn.Open
Conn.Close
Set Conn = Nothing
Run Code Online (Sandbox Code Playgroud)
  • 当我在Windows 32位机器上执行它时,它运行并结束,没有任何概念(预期).
  • 当我在Windows 64位计算机上执行此操作时,它会收到错误

    无法找到提供商.它可能没有正确安装.

但它已安装.我认为问题的根源是提供者是32位提供者,据我所知它不存在为64位.

如果我在64位计算机上通过IIS运行VBScript(作为ASP文件),我可以选择它应该以32位模式运行.然后它可以找到提供者.

如何在Windows 64位上找到提供程序?我可以告诉CScript(执行.vbs文本文件)以某种方式在32位模式下运行吗?

vol*_*ody 69

访问http://support.microsoft.com/kb/896456

要启动32位命令提示符,请按照下列步骤操作:

* Click Start, click Run, type %windir%\SysWoW64\cmd.exe, and then click OK.
Run Code Online (Sandbox Code Playgroud)

然后输入

cscript vbscriptfile.vbs
Run Code Online (Sandbox Code Playgroud)

  • WoW代表Windows上的Windows.它是一个兼容层,使64位Windows像32位Windows一样运行,因此它可以运行32位程序. (11认同)
  • 您也可以一步一步完成。运行`%windir%\ SysWoW64 \ cscript vbscriptfile.vbs` (3认同)

小智 18

' C:\Windows\System32\WScript.exe = WScript.exe
Dim ScriptHost : ScriptHost = Mid(WScript.FullName, InStrRev(WScript.FullName, "\") + 1, Len(WScript.FullName))

Dim oWs : Set oWs = CreateObject("WScript.Shell")
Dim oProcEnv : Set oProcEnv = oWs.Environment("Process")

' Am I running 64-bit version of WScript.exe/Cscript.exe? So, call script again in x86 script host and then exit.
If InStr(LCase(WScript.FullName), LCase(oProcEnv("windir") & "\System32\")) And oProcEnv("PROCESSOR_ARCHITECTURE") = "AMD64" Then
    ' rebuild arguments
    If Not WScript.Arguments.Count = 0 Then
        Dim sArg, Arg
        sArg = ""
        For Each Arg In Wscript.Arguments
              sArg = sArg & " " & """" & Arg & """"
        Next
    End If

    Dim sCmd : sCmd = """" &  oProcEnv("windir") & "\SysWOW64\" & ScriptHost & """" & " """ & WScript.ScriptFullName & """" & sArg
    WScript.Echo "Call " & sCmd
    oWs.Run sCmd
    WScript.Quit
End If
Run Code Online (Sandbox Code Playgroud)

  • 请加一点解释 (3认同)
  • 这是一块金块。将其包装在“VerifyArchitecture”子程序中,将子程序放在脚本底部并在第一行调用它。值得比得到的更多的爱! (3认同)
  • 以上实际上非常有效.只需将您的脚本添加到它的底部(在End If之后),它将在64位操作系统上运行,与在32位操作系统上运行相同,并且透明地执行.谢谢. (2认同)

tyr*_*nid 14

如果您可以控制运行cscript可执行文件,那么运行X:\windows\syswow64\cscript.exe32位实现的版本.


小智 5

我们可以通过将“Computer\HKLM\SOFTWARE]\Classes\VBSFile\Shell\Open\Command”键的默认值中的“system32”更改为“sysWOW64”来强制vbscript始终以32位模式运行

  • (@程序员学院):只是为了澄清2.5年后...将64位计算机上的注册表项从“System32”更改为“SysWow64”确实会导致VBScript以32位运行GUI脚本。您是正确的,默认注册表项指向 System32\WScript.exe,它是 64 位二进制文​​件。感谢 Ronie Do 的贡献。 (2认同)
  • 我认为这很危险,因为这样**任何** VBS 脚本都将以 32 位执行。这可能不是你的本意。 (2认同)