Forzar WScript de 64 bits para ejecutar .vbs

Forzar WScript de 64 bits para ejecutar .vbs

Estoy intentando ejecutar un script .vbs en 64 bits. Cuando ejecuto este script manualmente, se ejecutará correctamente, pero cuando lo inicie otra cosa, se ejecutará en 32 bits y no se ejecutará correctamente.

Aquí está mi guión:

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

Básicamente quiero forzar el uso de C:\windows\syswow64\cmd.exe, para que se ejecute correctamente. Parece que no puedo entender bien la sintaxis y no puedo encontrar ayuda al respecto.

Aquí está el archivo por lotes y el archivo regedit que estoy intentando ejecutar:

EjecutarZune.bat:

@ECHO OFF

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

exit

FuncionesOverride.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"

Respuesta1

El siguiente código comprobará si el sistema es de 64 bits y en este caso cerrará el script y lo volverá a ejecutar forzando el Host de 64 bits llamándolo directamente con el script como parámetro.

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

Esta solución alternativa garantiza que el script se ejecute en 64 bits sin importar quién lo llame. Si tiene una situación en la que puede controlar la llamada (por ejemplo, el script solo se llama a través de un enlace específico), probablemente pueda usar el principio básico (que es elredirector del sistema de archivos sysnative) directamente en su acceso directo.

información relacionada