Forçar o WScript de 64 bits a executar .vbs

Forçar o WScript de 64 bits a executar .vbs

Estou tentando executar um script .vbs em 64 bits. Quando executo este script manualmente, ele será executado corretamente, mas quando iniciado por outra coisa, será executado em 32 bits e não será executado corretamente.

Aqui está meu roteiro:

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

Basicamente quero forçar o uso do C:\windows\syswow64\cmd.exe, para que ele rode corretamente. Não consigo acertar a sintaxe e não consigo encontrar ajuda sobre isso.

Aqui está o arquivo em lote e o arquivo regedit que estou tentando executar:

ExecuteZune.bat:

@ECHO OFF

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

exit

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

Responder1

O código a seguir irá verificar se o sistema é 64Bit e neste caso fechar o script e executá-lo novamente forçando o Host 64Bit chamando-o diretamente com o 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 solução alternativa garante que o script seja executado em 64 bits, independentemente de quem o chama. Se você tiver uma situação em que possa controlar a chamada (por exemplo, o script só é chamado através de um link específico), provavelmente poderá usar apenas o princípio básico (que é oredirecionador do sistema de arquivos sysnative) diretamente no seu atalho.

informação relacionada