强制 64 位 WScript 运行 .vbs

强制 64 位 WScript 运行 .vbs

我正在尝试在 64 位下运行 .vbs 脚本。当我手动运行此脚本时,它会正确执行,但是当由其他程序启动时,它会在 32 位下运行并且无法正确执行。

这是我的脚本:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run Chr(34) & "C:\Users\Chris Nicol\Documents\SlickRun Scripts\Zune\RunZune.bat" & Chr(34), 0
Set WshShell = Nothing

基本上我想强制使用C:\windows\syswow64\cmd.exe,以便它能够正确运行。我似乎无法正确理解语法,也找不到这方面的帮助。

这是我正在尝试执行的批处理文件和 regedit 文件:

运行Zune.bat:

@ECHO OFF

regedit /s FeaturesOverride.reg
"C:\Program Files\Zune\Zune.exe"

exit

FeaturesOverride.reg:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Zune\Features]
"Channels"="US,CA"
"MusicVideos"="US,CA"
"Picks"="US,CA"
"Podcasts"="US,CA"
"QuickMixLocal"="US,CA"

答案1

以下代码将检查系统是否为 64 位,在这种情况下关闭脚本并重新运行它,通过使用脚本作为参数直接调用它来强制 64 位主机。

If fso.FileExists("C:\Windows\SysWOW64\wscript.exe") Then
    If InStr(1, WScript.FullName, "SysWOW64", vbTextCompare) <> 0 Then ' = very basic 64bit check replace if you want a more sophisticated one
        newFullName = Replace(WScript.FullName, "SysWOW64", "Sysnative", 1, -1, vbTextCompare) ' System32 will be replaced by Sysnative. calls to sysnative bypass WoW64 emulation, cscript or wscript stays the same as they were
        newArguments = "" ' all arguments are given to the new script call
        For Each arg In WScript.Arguments
            newArguments = newArguments & arg & " "
        Next
        wso.Run newFullName & " """ & WScript.ScriptFullName & """ " & newArguments, , False
        WScript.Quit ' Close 32Bit scripting host
    End If
End If

此解决方法可确保无论谁调用该脚本,它都会在 64 位中运行。如果您可以控制调用(例如,脚本仅通过特定链接调用),您可能只需使用基本原理(即系统文件系统重定向器) 直接在您的快捷方式中。

相关内容