64비트 WScript에서 .vbs를 실행하도록 강제

64비트 WScript에서 .vbs를 실행하도록 강제

64Bit에서 .vbs 스크립트를 실행하려고 합니다. 이 스크립트를 수동으로 실행하면 제대로 실행되지만, 다른 스크립트를 실행하면 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 파일은 다음과 같습니다.

RunZune.bat:

@ECHO OFF

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

exit

FeatureOverride.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

다음 코드는 시스템이 64Bit인지 확인하고 이 경우 스크립트를 닫고 스크립트를 매개변수로 직접 호출하여 64Bit 호스트를 강제로 다시 실행합니다.

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

이 해결 방법을 사용하면 누가 호출하든 스크립트가 64Bit에서 실행됩니다. 호출을 제어할 수 있는 상황(예: 스크립트는 특정 링크를 통해서만 호출됨)이 있는 경우 기본 원칙(즉,sysnative 파일 시스템 리디렉터)를 바로가기에 직접 추가하세요.

관련 정보