2016年02月18日

64bitOS上での32bit用Script実行

syntaxHilighter3テストがてら...

64bitOS上で32bitとしてJSを実行したい場合があります
理由は、COMコンポーネントが32bit用しかない場合です
というかBASP21使ってるから!

64bitOSではこんなバッチファイルで凌いでたのですが

test_wow64.bat
@echo off
%~d0
cd /d %~d0%~p0
start "" /min "%Systemroot%\SysWoW64\CScript.exe" "test.js" %*

いい加減面倒になってきたので、JS内で何とかしてみるテスト
test.js
Chg32bitScript();

var VBS_String = 'InputBox("てすと")';
var objSC = new ActiveXObject("ScriptControl");
objSC.Language = "VBScript";
WScript.Echo(objSC.Eval(VBS_String));

//-----------------------------------------------------------------
//! 32bitScript切替
/*! 64bitOS環境で実行時に32bitScriptとして再実行する
    @remarks 32bitOSや、32bitアプリからのScript実行時は何もしない
*/
function Chg32bitScript()
{
    var shell = WScript.CreateObject("WScript.Shell");
    if( (shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%").indexOf("64") >= 0) && (WScript.FullName.toUpperCase().indexOf("SYSTEM32") >= 0) ) {
        // 64bit
        var fso = WScript.CreateObject("Scripting.FileSystemObject");
        var cscript_fname = fso.GetFileName( WScript.FullName );
        var cscript_fullname = fso.GetSpecialFolder(0).Path + "\\SysWOW64\\" + cscript_fname;
        if ( fso.FileExists(cscript_fullname) != true ) {
            // SysWOW64にcscript_fnameなし
            WScript.Quit(4001);
        }
        var args = "\"" + WScript.ScriptFullName + "\"";
        for( var i=0; i<WScript.Arguments.length; i++ ) {
            args += " \"" + WScript.Arguments(i) + "\"";
        }
        var ret = shell.Run( "\"" + cscript_fullname + "\" " + args, 10, true );
        WScript.Quit( ret );
    }
    else {
        // 32bit
    }
}

VBScript風InputBoxを表示しますが、このInputBoxは32bitでないと動きません
そのため64bitの場合は32bitで再実行してます
posted by sanahi at 20:39| 滋賀 ☀| Comment(0) | TrackBack(0) | JScript(WSH) | このブログの読者になる | 更新情報をチェックする

Remarks
記事中にソースコードが含まれる場合、ソースコードの再利用、改変、「オレのものにする」等は自由ですが、
ソースコードを利用して起こった問題は一切責任を負いません。(自己責任での利用となります。)
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。