
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.