Поместите этот дополнительный вызов в начало вашего скрипта:
RunAs32()
и включите этот саб в
Sub RunAs32
Set objShell = CreateObject("Wscript.Shell")
If objShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then
objShell.Run "c:\Windows\SysWow64\cscript.exe """ & WScript.ScriptFullName & """",1,False
WScript.Quit
End If
End Sub
Если механизм cscript работает как 64-битный, тогда переменная среды PROCESSOR_ARCHITECTURE
будет равна AMD64
, в противном случае она будет x86
. Если это AMD64
, вы можете перезапустить скрипт в другом процессе с 32-битной версией cscript, а затем выйти из исходного скрипта.
Имейте в виду, что если вы, как правило, дважды щелкаете по скрипту для его запуска, откроется w script.exe. Вы можете проверить вызывающий движок с помощью этой строки:
pcengine = LCase(Mid(WScript.FullName, InstrRev(WScript.FullName,"\")+1))
Для более полного ответа на проверку wscript против cscript (и откуда взялась вышеуказанная строка), проверьте этот пост
По сути, вы делаете аналогичный вызов checkengine
в верхней части вашего скрипта, затем включаете следующую подпрограмму:
Sub checkengine
pcengine = LCase(Mid(WScript.FullName, InstrRev(WScript.FullName,"\")+1))
' BEGIN CALLOUT A
If Not pcengine="cscript.exe" Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "CSCRIPT.EXE """ & WScript.ScriptFullName & """"
WScript.Quit
End If
' END CALLOUT A
End Sub