WScript.CreateObject: "MSScriptControl.ScriptControl" というオブジェクトを作成できませんでした。とエラーが出たとき

環境

Windwos10 64bit

起こっていること

cmd ファイルから JScript を起動する処理があって、JScript の中でユーザー入力をさせるため、下記のコードのように MSScriptControl.ScriptControl を使用していた。

http://www.recfor.net/blog/diary/index.php?itemid=630

var obj=WScript.CreateObject("MSScriptControl.ScriptControl");
obj.language="vbscript";
obj.addcode("function getInput() getInput = inputbox(\"Message box prompt\",\"MessageBoxTitle\") end function");
var i=obj.eval("getInput");
WScript.Echo(i);

ただ、Windows10 64bit の環境で動かすと、

WScript.CreateObject: "MSScriptControl.ScriptControl" というオブジェクトを作成できませんでした。

というエラーメッセージが表示されてしまう。

インターネットでメッセージを調べれば色々な記事が出てくるんだけど、 64bit 環境では ScriptControl が提供されていないためエラーになっている様子。

ユーザー入力したいだけだし他の何かを使おうと調べても、JScript では提供されていないみたいで、代替案が無い。 調べても MSScriptControl.ScriptControl を使った方法ばかりヒットする。

解決方法

解決方法を探していて見つけた回答(マインクラフトのフォーラムにたどり着いてた)

http://forum.minecraftuser.jp/viewtopic.php?f=36&t=17205&start=80#p230261

仮にこれが原因の場合には
実行時に64bitOSかつsystem32配下で動いている場合には(64bit版で動いている場合には)
SysWOW64配下で実行し直す(32bit版で再実行する)
という回避策があるようです。

64bit でダメなんだから、32bit で動かせばいいよってことか。 (元々は Windows7 32bit で動作していた)

https://mo.kerosoft.com/0153

このページを参考にして、cmd ファイルの先頭に下記のコードを記述して、64bit の場合は、32bit 環境のコマンドプロンプトで起動し直すようにする。

if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" (
    C:\Windows\SysWOW64\cmd /C %0
    exit
)

これで、今まで通り 32bit 環境で動作するようになり、MSScriptControl.ScriptControl も使えるようになる。