CreateObject("SAP.Functions") でエラー(RunOn32bit を使って解決)

2018年2月2日金曜日

SAP vbs

t f B! P L
vbscriptでSAPとRFCでおしゃべりするときは、32bit版の環境で動かす必要がある、
ということらしい。
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


このブログを検索

サイトマップ

  • ()
  • ()
もっと見る

Google検索

マルウェア「Emotet」に感染したくないから、「EmoCheck」と「EmoKill」の使い方、利用方法をまとめてみた!

  はじめに 世間を騒がしている「Emotet」。2014年ごろから確認されているマルウェアだが、流行と鎮静化を繰り返しながら変異を続けており、今もなお大きな影響を及ぼしている。2020年は、多数の企業が被害を受けた年になった。 Emotetに一旦感染するとやっかいだ。そのモジュ...

QooQ