如何从Wow64下运行的vbscript启动以64位模式运行的Vb脚本

如何从Wow64下运行的vbscript启动以64位模式运行的Vb脚本,vbscript,shell,launch,wow64,Vbscript,Shell,Launch,Wow64,我有一个VB脚本,它被强制在Wow64模式下运行。我想让它在本机64位模式下启动另一个脚本或自身。有什么办法吗 通过显式调用cscript.exe调用初始脚本(不确定这是否会产生影响) 谢谢显然这很简单 在Windows Vista和更新版本中,C:\Windows\Sysnative上有一个别名文件夹。如果调用它,它将不会重定向到c:\windows\SysWow64 32位文件夹,但将强制调用本机64位可执行文件 因此,通过调用%windir%\Sysnative\cscript.exe,

我有一个VB脚本,它被强制在Wow64模式下运行。我想让它在本机64位模式下启动另一个脚本或自身。有什么办法吗

通过显式调用cscript.exe调用初始脚本(不确定这是否会产生影响)


谢谢

显然这很简单

在Windows Vista和更新版本中,C:\Windows\Sysnative上有一个别名文件夹。如果调用它,它将不会重定向到c:\windows\SysWow64 32位文件夹,但将强制调用本机64位可执行文件

因此,通过调用%windir%\Sysnative\cscript.exe,然后将脚本名称作为参数提供,可以从wow64模式下运行的vbscript运行64位模式下的vbscript

但是,这仅适用于Windows Vista或更高版本。有一个修补程序可以在Windows XP/2003中启用此Sysnative文件夹


将以下代码放在脚本顶部,以检测操作系统是否为64位,然后在32位模式下重新运行

'***************
'***64位检查
' ***************
'检查是否使用64位操作系统->使用32位cscript重新运行此脚本
使用CSCRIPT32重新启动函数(附加参数)
Dim strCMD,iCount
strCMD=r32wShell.ExpandEnvironmentStrings(“%SYSTEMROOT%”)&“\SysWOW64\cscript.exe”
如果没有r32fso.FileExists(strCMD),那么strCMD=“cscript.exe”'如果我们找不到SysWOW64版本,这可能不起作用
strCMD=strCMD&Chr(32)&Wscript.ScriptFullName&Chr(32)
如果Wscript.Arguments.Count>0,则
对于WScript.Arguments.Count-1的iCount=0
如果Instr(Wscript.Arguments(iCount),“”=0,则“添加无空格的参数”
strCMD=strCMD&&&Wscript.Arguments(iCount)&
其他的
如果Instr(“/-\”,Left(Wscript.Arguments(iCount),1))>0,则“引用间隔参数”
如果InStr(WScript.Arguments(iCount),“=”>0,则
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然后
strCMD=strCMD&&Left(Wscript.Arguments(iCount),Instr(Wscript.Arguments(iCount),“:”)和“”&Mid(Wscript.Arguments(iCount),Instr(Wscript.Arguments(iCount),“:”+1)和“
其他的
strCMD=strCMD&“”&Wscript.Arguments(iCount)&“”
如果结束
其他的
strCMD=strCMD&“”&Wscript.Arguments(iCount)&“”
如果结束
如果结束
下一个
如果结束
r32wShell。运行strCMD&&extraargs,0,False
端函数
尺寸r32wShell、r32env1、r32env2、r32incount
Dim r32fso
设置r32fso=CreateObject(“Scripting.FileSystemObject”)
设置r32wShell=WScript.CreateObject(“WScript.Shell”)
r32env1=r32wShell.expandEnvironmentString(“%PROCESSOR\u ARCHITECTURE%”)
如果r32env1为“x86”,则
“我们不是在x86模式下运行,所以请在该模式下运行;检查我们是否已经这样做了
对于r32iCount=0到WScript.Arguments.Count-1
r32env2=r32env2&WScript.Arguments(r32iCount)&VbCrLf
下一个
'MsgBox“64位(重新启动)”&r32env2
如果InStr(r32env2,“restart32”)=0,则使用cscript32“restart32”重新启动,否则MsgBox“找不到32位版本的cscript.exe或未知操作系统类型”&r32env1
设置r32wShell=Nothing
WScript.Quit
其他的
对于r32iCount=0到WScript.Arguments.Count-1
r32env2=r32env2&WScript.Arguments(r32iCount)&VbCrLf
下一个
'MsgBox“32位!”&r32env2
如果结束
“MsgBox”操作系统:&r32env1&VbCrLf&“参数:&r32env2&VbCrLf&”脚本:&WScript.FullName&VbCrLf&“FullName:&”&WScript.ScriptFullName
设置r32wShell=Nothing
设置r32fso=Nothing
'WScript.Quit
' *******************
'***结束64位检查
' *******************