ということらしい。
64bit版の環境で動かすと、以下のようなエラーが出てしまう。
以前、
「C:\Windows\SysWOW64\WScript.exe hogehoge.vbs」
というバッチファイルからキックすればいい、という記事を書いたけど、
バッチファイルと常にセットで使うのはどうもな、、、と思っていたら、
WSH VBScript - ひとり64bit OS対応 - ノートの余白みたいなもの
という記事を見つけた!
このサイトには RunOn32bit というサブプロシージャが掲載されていて、
自作の vbscript に RunOn32bit を記述しておくと、いったんは64bitコマンドの下で実行されたとしても、32bitコマンドで実行し直してくれる、というもの。
ところが!
最近こちらのサイトを見てみると、この記事が削除されているようで、、、
この知見が失われるのは、ちょっともったいないなと思うので、プロシージャを貼り付けておこう(自分のため^^;)。
vbscriptの最初のほうで、「RunOn32bit」をコールしてあげれば機能します。
' ------------------------------------------------ ' 64bit版VBScriptの場合は32bit版で起動しなおす ' ------------------------------------------------ Public Sub RunOn32bit Dim p_objWshShell Dim p_admArg Dim p_admArrayArguments Dim p_admWscriptCscript Dim p_admCommand Set p_objWshShell = CreateObject("Wscript.Shell") 'Environment("Process").Item("PROCESSOR_ARCHITECTURE")がx86の場合は32bit、そうでなければ64bitでVBScriptが動いている '32bitだった場合は何もしない、64bitだった場合は以下32bitで起動しなおす If p_objWshShell.Environment("Process").Item("PROCESSOR_ARCHITECTURE") <> "x86" Then 'コマンドライン引数が指定されている場合はそれを再利用するため取得する If Not WScript.Arguments.Count = 0 Then For Each p_admArg In Wscript.Arguments p_admArrayArguments = p_admArrayArguments & " """ & p_admArg & """" Next End If 'WScript.FullNameで起動しているプロセスの名前がわかるので、同じもので起動しなおすためWScriptかCScriptかを確認する If InStr(LCase(WScript.FullName), "wscript") > 0 Then p_admWscriptCscript = "WScript.exe" Else p_admWscriptCscript = "CScript.exe" End If 'WScript.ScriptFullNameでスクリプトのパスを取得し、これまでに取得した情報とあわせてコマンドを作成、Wscript.ShellのRunメソッドで実行する p_admCommand = """" & p_objWshShell.Environment("Process").Item("windir") & "\SysWOW64\" & p_admWscriptCscript & """ """ & WScript.ScriptFullName & """" & p_admArrayArguments p_objWshShell.Run p_admCommand '現在の(64bitの)プロセスを終了する WScript.Quit End If End Sub
0 件のコメント:
コメントを投稿