1

如何从 .net 获取VB6 ocx 的miscStatus而无需在本地计算机上注册?

我使用TLI (TypeLibInfo) 获取有关 ocx 的所有其他信息,但我不知道如何获取此属性?

有人知道 regsvr32 在注册 ocx 时如何生成 MiscStatus 吗?


编辑:我忘了说我想miscStatus从 ocx 获取而不需要在本地计算机上注册它。

4

2 回答 2

0

我不相信有像 TLI 这样的标准工具可以做到这一点。miscStatus似乎是在注册期间通过DLLRegisterFunction调用编写的,该调用由 DLL/OCX 本身提供,基本上可以做任何它想做的事情。

例如,注册期间要写入的注册表值可能包含在资源中。但这取决于程序员。

查看 regsvr32 本身的一些较旧的源代码,您可以看到它完全省略了关键字miscstatus. 我认为这证实了它的价值不需要以任何标准化的方式存储。

如果您绝对不能在您的开发/构建 PC 上注册 OCX,那么我能想到的下一个最好的事情就是在某种沙箱中注册它——比如 VM、Sandboxie,甚至可能是 Docker。然后你可以在读取注册表值后扔掉沙盒。但我从来没有真正尝试过这个。


另外,考虑一下这个值是否真的很重要。如果你把它排除在外,有什么东西会坏吗?可能许多杂项状态标志未设置或对您的特定应用程序无关紧要。

于 2020-03-23T15:07:43.817 回答
0

您可以尝试使用Registry.GetValue. 听起来您可能已经拥有 OCX 的 CLSID:

Dim ocxClsid As String = "13DE4A42-8D21-4C8E-BF9C-8F69CB068FCA" ' Replace with your CLSID
Dim key As String = "HKEY_CLASSES_ROOT\CLSID\{" & ocxClsid & "}\"

Dim readValue = My.Computer.Registry.GetValue(
    key, "MiscStatus", Nothing)
于 2019-09-10T15:49:04.190 回答