
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.