Принудительно запустить 64-битный WScript для .vbs

Принудительно запустить 64-битный WScript для .vbs

Я пытаюсь запустить скрипт .vbs под 64 бит. Когда я запускаю этот скрипт вручную, он выполняется правильно, но когда его запускает что-то другое, он запускается под 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

ВозможностиOverride.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-битном режиме, независимо от того, кто его вызывает. Если у вас есть ситуация, когда вы можете контролировать вызов (например, скрипт вызывается только через определенную ссылку), вы, вероятно, можете просто использовать базовый принцип (который являетсяперенаправитель файловой системы sysnative) прямо в вашем ярлыке.

Связанный контент