OK.....
Here's a little VBscript tool i made for genereating NSIS code for ActiveX registration.... 😛
I have only tested it briefly so you might want to check it out yourself... I use the generated script in conjunction with the NSIS !include command. It seems to work great.
This is the ".vbs" CODE... If you want to know how it works i suggest you start reading about the TypeLibInfo object....
Option Explicit
Dim LabelOffset
Dim oFileOut
Dim oFSO
Dim oTLI
LabelOffset=1
Set oFSO=CreateObject("scripting.filesystemobject")
Set oFileOut = oFso.CreateTextFile("DLLs-include.NSI", True)
Set oTLI=CreateObject("TLI.TLIApplication")
dumpTypeLibInfo "c:\winnt\system32\msvbvm60.dll","$SysDir","c:\winnt\system32\vb6stkit.dll",true
dumpTypeLibInfo "c:\winnt\system32\comdlg32.ocx","$SysDir","",true
dumpTypeLibInfo "c:\winnt\system32\mci32.ocx","$SysDir","",true
dumpTypeLibInfo "c:\winnt\system32\mscomctl.ocx","$SysDir","",true
dumpTypeLibInfo "c:\winnt\system32\mswinsck.ocx","$SysDir","",true
dumpTypeLibInfo "c:\winnt\system32\tabctl32.ocx","$SysDir","",true
oFileOut.close
Sub dumpTypeLibInfo(localfilename,outpath,additionalfiles,isTypeLib)
Dim guid
Dim TII
Dim fname
Dim l
Dim sFiles
Set TII = oTLI.TypeLibInfoFromFile(localfilename)
fname = outpath & "\" & mid(localfilename,instrrev(localfilename,"\")+1)
guid = TII.GUID
oFileOut.WriteLine("SetOutPath """ & outpath & """")
If isTypeLib Then
oFileOut.WriteLine("ReadRegStr $9 HKCR ""TYPELIB\" & guid & "\" & TII.majorversion & "." & TII.minorversion & "\" & TII.lcid & "\win32"" """"")
Else
oFileOut.WriteLine("ReadRegStr $9 HKCR ""CLSID\" & guid & "\InprocServer32"" """"")
End If
oFileOut.WriteLine("ClearErrors")
oFileOut.WriteLine("StrCmp $9 """" RegisterDLL" & LabelOffset)
oFileOut.WriteLine("CompareDLLVersions /STOREFROM """ & localfilename & """ """ & fname & """ UnRegisterDLL" & LabelOffset & " RegComplete" & LabelOffset)
oFileOut.WriteLine("Goto RegComplete" & LabelOffset )
oFileOut.WriteLine("UnRegisterDLL" & LabelOffset & ":")
oFileOut.WriteLine("UnRegDLL """ & fname & """")
oFileOut.WriteLine("Sleep 1000")
oFileOut.WriteLine("RegisterDLL" & LabelOffset & ":")
oFileOut.WriteLine("File """ & localfilename & """")
sFiles=split(additionalfiles,";")
For l=0 to UBound(sFiles)
oFileOut.WriteLine("File """ & sFiles(l) & """")
Next
oFileOut.WriteLine("RegDLL """ & fname & """")
oFileOut.WriteLine("RegComplete" & LabelOffset & ":")
oFileOut.WriteLine("")
LabelOffset=LabelOffset+1
End sub