55

.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
  • これをWindows32ビットマシンで実行すると、何の概念もなく実行および終了します(予期されます)。
  • これをWindows64ビットマシンで実行すると、エラーが発生します

    プロバイダーが見つかりません。正しくインストールされていない可能性があります。

しかし、それはインストールされています。問題の根本は、64ビットとして存在しないことを私が知っている限り、プロバイダーが32ビットプロバイダーであるということだと思います。

64ビットマシンでIISを介して(ASPファイルとして)VBScriptを実行する場合、32ビットモードで実行するように選択できます。その後、プロバイダーを見つけることができます。

Windows 64ビットでプロバイダーを検索するにはどうすればよいですか?CScript(.vbsテキストファイルを実行する)に32ビットモードで実行するように指示できますか?

4

7 に答える 7

78

http://support.microsoft.com/kb/896456をフォローする

32ビットコマンドプロンプトを開始するには、次の手順に従います。

* Click Start, click Run, type %windir%\SysWoW64\cmd.exe, and then click OK.

次に、次のように入力します

cscript vbscriptfile.vbs
于 2010-05-10T21:37:55.253 に答える
21

WScript.exe2つのバージョンがあり、1つはディレクトリC:\Windows\System32\に、もう1つはC:\Windows\SysWOW64\ディレクトリにあります。それらはそれぞれ64ビットと32ビットで実行されます(即時ロジックに対しては真です)。

スクリプトの先頭に次のコードを追加して、64ビットで呼び出されたことを検出した場合に32ビットで自動的に再開するようにすることができます。

64ビットに切り替えるために自分自身を呼び出す場合は引数を送信することに注意してください。

' 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
于 2013-03-10T09:29:35.100 に答える
14

cscript実行可能ファイルの実行を制御できる場合X:\windows\syswow64\cscript.exeは、32ビット実装であるバージョンを実行します。

于 2010-05-10T21:35:04.323 に答える
4

キー「Computer\HKLM \ SOFTWARE] \ Classes \ VBSFile \ Shell \ Open \ Command」のデフォルト値で「system32」を「sysWOW64」に変更することにより、vbscriptを常に32ビットモードで実行するように強制できます。

于 2015-04-16T10:10:11.537 に答える
2
   ' ***************
   ' *** 64bit check
   ' ***************
   ' check to see if we are on 64bit OS -> re-run this script with 32bit cscript
   Function RestartWithCScript32(extraargs)
   Dim strCMD, iCount
   strCMD = r32wShell.ExpandEnvironmentStrings("%SYSTEMROOT%") & "\SysWOW64\cscript.exe"
   If NOT r32fso.FileExists(strCMD) Then strCMD = "cscript.exe" ' This may not work if we can't find the SysWOW64 Version
   strCMD = strCMD & Chr(32) & Wscript.ScriptFullName & Chr(32)
   If Wscript.Arguments.Count > 0 Then
    For iCount = 0 To WScript.Arguments.Count - 1
     if Instr(Wscript.Arguments(iCount), " ") = 0 Then ' add unspaced args
      strCMD = strCMD & " " & Wscript.Arguments(iCount) & " "
     Else
      If Instr("/-\", Left(Wscript.Arguments(iCount), 1)) > 0 Then ' quote spaced args
       If InStr(WScript.Arguments(iCount),"=") > 0 Then
        strCMD = strCMD & " " & Left(Wscript.Arguments(iCount), Instr(Wscript.Arguments(iCount), "=") ) & """" & Mid(Wscript.Arguments(iCount), Instr(Wscript.Arguments(iCount), "=") + 1) & """ "
       ElseIf Instr(WScript.Arguments(iCount),":") > 0 Then
        strCMD = strCMD & " " & Left(Wscript.Arguments(iCount), Instr(Wscript.Arguments(iCount), ":") ) & """" & Mid(Wscript.Arguments(iCount), Instr(Wscript.Arguments(iCount), ":") + 1) & """ "
       Else
        strCMD = strCMD & " """ & Wscript.Arguments(iCount) & """ "
       End If
      Else
       strCMD = strCMD & " """ & Wscript.Arguments(iCount) & """ "
      End If
     End If
    Next
   End If
   r32wShell.Run strCMD & " " & extraargs, 0, False
   End Function

   Dim r32wShell, r32env1, r32env2, r32iCount
   Dim r32fso
   SET r32fso = CreateObject("Scripting.FileSystemObject")
   Set r32wShell = WScript.CreateObject("WScript.Shell")
   r32env1 = r32wShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")
   If r32env1 <> "x86" Then ' not running in x86 mode
    For r32iCount = 0 To WScript.Arguments.Count - 1
     r32env2 = r32env2 & WScript.Arguments(r32iCount) & VbCrLf
    Next
    If InStr(r32env2,"restart32") = 0 Then RestartWithCScript32 "restart32" Else MsgBox "Cannot find 32bit version of cscript.exe or unknown OS type " & r32env1
    Set r32wShell = Nothing
    WScript.Quit
   End If
   Set r32wShell = Nothing
   Set r32fso = Nothing
   ' *******************
   ' *** END 64bit check
   ' *******************

上記のコードをスクリプトの先頭に配置すると、後続のコードは32ビットモードで実行され、32ビットODBCドライバーにアクセスできます。ソース

于 2013-09-08T23:07:12.780 に答える
1

64ビットマシンで32ビットスクリプトを実行する別の方法:%windir%\ syswow64 \ cscript.exe vbscriptfile.vbs

于 2014-05-08T11:06:13.310 に答える
1

ランチャースクリプトでは、それを強制することができ、両方のアーキテクチャで同じスクリプトと同じランチャーを維持することができます

:: For 32 bits architecture, this line is sufficent (32bits is the only cscript available)
set CSCRIPT="cscript.exe"
:: Detect windows 64bits and use the expected cscript (SysWOW64 contains 32bits executable)
if exist "C:\Windows\SysWOW64\cscript.exe" set CSCRIPT="C:\Windows\SysWOW64\cscript.exe"
%CSCRIPT% yourscript.vbs
于 2015-04-17T13:01:36.473 に答える