COM の登録作業


  COM が登録されているかどうか




レジストリのデータ を調べます。

登録されている場合は、InprocServer32 エントリにあるパスを返します
登録されていない場合は "" を返します

  

Result = IsComExist( "Lbox.BatchHelper" )
if Result <> "" then
	WScript.Echo Result
end if

' **********************************************************
' COM が登録されているかどうか
' **********************************************************
Function IsComExist( strProgID )

	Dim strValue

	on error resume next

	strValue = WshShell.RegRead("HKCR\" & strProgID & "\CLSID\")
	if Err.Number <> 0 then
		IsComExist = ""
		Exit Function
	end if

	strValue = "HKCR\CLSID\" & strValue
	strValue = strValue & "\InprocServer32\"
	strValue = WshShell.RegRead(strValue)
	if Err.Number <> 0 then
		IsComExist = ""
		Exit Function
	end if

	strValue = WshShell.ExpandEnvironmentStrings( strValue )

	on error goto 0

	IsComExist = strValue

End Function
  

  システムディレクトリの取得




Shell.Application を使用すると、システムディレクトリを取得できます

  

WScript.Echo GetSystemDirectory( )

' **********************************************************
' システムディレクトリの取得
' **********************************************************
Function GetSystemDirectory( )

	Dim obj

	Set obj = CreateObject( "Shell.Application" )
	Set objFolder = obj.Namespace( &H25 )
	Set objFolderItem = objFolder.Self
	GetSystemDirectory = objFolderItem.Path

End Function
  

  regsvr32.exe による登録

処理としては以下のプロセスになります

1) COM が登録されているかどうかチェック
2) 登録されていなければ 6) へ進む
3) 登録されているパスで実際存在するかどうかチェック。存在すれば 5) へ進む
4) 存在しない場合はその場所へ登録ファイルをコピー
5) regsvr32.exe /u で登録を解除
6) システムディレクトリへ登録ファイルをコピー
7) コピー先のパスで regsvr32.exe を実行

  

ErrMessage = "インストールに失敗しました。システム権限で実行して下さい"
EndMessage = "インストールが完了しました"
nNextStep = 1

' ----------------------------------------------------------
' COM
' ----------------------------------------------------------
strProg = "Lbox.dll"
nStep = 1
strTarget = IsComExist( "Lbox.BatchHelper" )
if strTarget = "" then
	nNextStep = 6
end if

nStep = 3
if nStep >= nNextStep then
	WScript.Echo strProg & _
		" を既に登録されているパスで存在チェック"
	if Fso.FileExists( strTarget ) then
		nNextStep = 5
	end if
end if

nStep = 4
if nStep >= nNextStep then
	WScript.Echo strProg & _
		" を登録されているパスへコピー (" & _
		strTarget & ")"
	Call Fso.CopyFile( strProg, strTarget )
end if

nStep = 5
if nStep >= nNextStep then
	strCommand = "regsvr32.exe /u """ & strTarget & """"
	WScript.Echo strProg & _
		" が正しく登録されているのでいったん登録解除 (" & _
		strCommand & ")"
	' 実行終了を待つ
	Call WshShell.Run( strCommand,,True )
end if

nStep = 6
if nStep >= nNextStep then
	strTarget = GetSystemDirectory( )
	WScript.Echo strProg & _
		" をシステムディレクトリへコピー (" & _
		strTarget & ")"
	if strTarget = "" then
		WScript.Echo ErrMessage
		WScript.Quit
	end if
	Call Fso.CopyFile( strProg, strTarget & "\" & strProg )
end if

nStep = 7
if nStep >= nNextStep then
	strCommand = "regsvr32.exe """ & strTarget & "\" & strProg & """"
	WScript.Echo strProg & _
		" をシステムディレクトリの登録ファイルで登録します (" & _
		strCommand & ")"
	' 実行終了を待つ
	Call WshShell.Run( strCommand,,True )
end if

WScript.Echo EndMessage
  

  Windows Script Component の登録

Windows Script Component は、スクリプトで書かれたコンポーネントです。

登録方法が少し違いますが、基本的な手順は同じです。
( 以下は専用の IsWscExist 関数です )

  

' **********************************************************
' Windows Script Component が登録されているかどうか
' **********************************************************
Function IsWscExist( strProgID )

	Dim strValue

	on error resume next

	strValue = WshShell.RegRead("HKCR\" & strProgID & "\CLSID\")
	if Err.Number <> 0 then
		IsWscExist = ""
		Exit Function
	end if

	strValue = "HKCR\CLSID\" & strValue
	strValue = strValue & "\ScriptletURL\"
	strValue = WshShell.RegRead(strValue)
	if Err.Number <> 0 then
		IsWscExist = ""
		Exit Function
	end if

	on error goto 0

	IsWscExist = Right( strValue, Len( strValue ) - 7 )

End Function
  

以下に、COM を処理した後に継続して実行するコードを示します

  

' ----------------------------------------------------------
' Windows Script Component
' ----------------------------------------------------------
strProg = "BatchWsc.wsc"
nStep = 8
strTarget = IsWscExist( "Lbox.BatchWsc" )
if strTarget = "" then
	nNextStep = 12
end if

nStep = 9
if nStep >= nNextStep then
	WScript.Echo strProg & _
		" を既に登録されているパスで存在チェック"
	if Fso.FileExists( strTarget ) then
		nNextStep = 11
	end if
end if

nStep = 10
if nStep >= nNextStep then
	WScript.Echo strProg & _
		" を登録されているパスへコピー (" & _
		strTarget & ")"
	Call Fso.CopyFile( strProg, strTarget )
end if

nStep = 11
if nStep >= nNextStep then
	strCommand = "regsvr32.exe scrobj.dll /u /n "
	strCommand = strCommand & "/i:""file://" & strTarget & """"
	WScript.Echo strProg & _
		" が正しく登録されているのでいったん登録解除 (" & _
		strCommand & ")"
	' 実行終了を待つ
	Call WshShell.Run( strCommand,,True )
end if

nStep = 12
if nStep >= nNextStep then
	strTarget = GetSystemDirectory( )
	WScript.Echo strProg & _
		" をシステムディレクトリへコピー (" & _
		strTarget & ")"
	if strTarget = "" then
		WScript.Echo ErrMessage
		WScript.Quit
	end if
	Call Fso.CopyFile( strProg, strTarget & "\" & strProg )
end if

nStep = 13
if nStep >= nNextStep then
	strCommand = "regsvr32.exe scrobj.dll /n "
	strCommand = strCommand & "/i:""file://"
	strCommand = strCommand & strTarget & "\" & strProg & """"
	WScript.Echo strProg & _
		" をシステムディレクトリの登録ファイルで登録します (" & _
		strCommand & ")"
	' 実行終了を待つ
	Call WshShell.Run( strCommand,,True )
end if

WScript.Echo EndMessage
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[vbsguide]
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
24/04/20 06:21:01
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube