【发布时间】:2010-01-18 16:14:17
【问题描述】:
有没有办法在 VB6 中获取对象的文件和/或程序集版本?
我们遇到了一些参考问题,我能够在有问题的机器上创建后期绑定的对象,所以我希望吐出它正在抓取的版本,以确定该版本的位置。
【问题讨论】:
有没有办法在 VB6 中获取对象的文件和/或程序集版本?
我们遇到了一些参考问题,我能够在有问题的机器上创建后期绑定的对象,所以我希望吐出它正在抓取的版本,以确定该版本的位置。
【问题讨论】:
听起来好像您可以访问问题机器。
如果这是一个进程内对象(DLL 或 OCX),我可以建议您使用 ProcessExplorer 来代替吗?
执行 Start\Run 并键入 http://live.sysinternals.com/procexp.exe 以运行 Process Explorer。在进程列表中突出显示您的应用程序,切换到 DLL 视图,下方窗格将显示进程加载的所有 DLL 和 OCX 的路径和版本号。
如果是进程外对象,我建议查看注册表,看看哪个程序注册为服务器。
首先使用the ProgID to find an entry in the registry 查找CLSID。 ProgID 是可与 CreateObject 一起使用的人类可读字符串,例如Excel.Application。 CLSID 是一个 128 位数字,以十六进制表示,位于一对花括号内。查看注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Classes\{ProgID}\CLSID
查看HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ClsId}\ 下的LocalServer32 条目,其中{ClsId} 是对象的类ID。此条目为您提供了提供对象的 exe 的路径。
【讨论】:
您可以尝试使用 TypeLibInfo 来获取一些信息。
在 VB6 中,转到参考并参考 TypeLib Information。然后创建一个对象,并在调试器中尝试检查各种属性。示例:
Dim x As Object
Set x = CreateObject("Excel.Application")
x.Visible = True
Dim ti As TLI.TLIApplication
Set ti = New TLI.TLIApplication
With ti.InterfaceInfoFromObject(x)
MsgBox .Guid
End With
'Close Excel yourself if things went bad.
【讨论】: