让VB6显示哪个组件没有安装设计时许可证

8

我接手了一个VB6项目,现在我正在尝试进行“Make”操作。

但是,在“Making EXE”步骤中,构建失败并出现了许可证错误:

License information for this component not found. 
You do not have an appropriate license to use this functionality 
in the design environment.

我该如何确定哪个组件缺少许可证?

该项目有约15个引用,其中包括商业和Microsoft的混合引用。我已经为所有明显的引用安装了开发版本/许可证,并检查了它们的示例应用程序能否成功编译。

对于剩余的13个奇怪的引用,我该如何获取更多信息以确定哪个组件抛出了许可证错误?

如果有任何关于如何获得更详细的错误消息的提示/技巧,将不胜感激!

4个回答

13

如果你遇到了这个错误,可以尝试微软提供的两种修复方法:第一种第二种。这些修复方案已知可解决部分问题,值得一试。

如果以上方法无效,可以打开VB6 IDE中每个窗体的表单设计器,观察是否出现显示表单时的错误消息框。当显示此错误时,IDE将会生成一个名为formname.log的日志文件,其中记录了导致问题的控件信息。


1
在https://web.archive.org/上都没有链接可用。但是关于表格的第二部分是一个非常有用的提示。 - StayOnTarget
感谢@UuDdLrLrSs指出了损坏的链接!该死的微软,你们过分清理旧的知识库文章了!但是,为Jeff Parsons将它们放在GitHub上鼓掌!我已经在答案中编辑了这些链接...提示:如果您知道号码,"KB<number>"对于在Google上查找KB文章很有用,并且该号码是这些旧链接的一部分。 - MarkJ
好的修复!我希望在搜索 KB 号码时,Jeff 的副本能够更频繁地出现。 - StayOnTarget
提示:如果您知道号码,并且该编号是那些旧链接的一部分,Microsoft和“KB <number>”对于在谷歌上查找KB文章非常有用。 - MarkJ
我以为我已经尝试过了...下次我需要缺失的微软文章时,我会确保再次尝试(可悲的是,这种情况经常发生)。谢谢。 - StayOnTarget

3
  1. 创建一个新的空应用程序,并确保所有引用相同
  2. 确认你仍然有相同的问题
  3. 删除所有引用中的后一半
  4. 如果您仍然有相同的问题,则问题在剩余的引用上。回到步骤3。
  5. 如果不是这样,则问题在您删除的引用中。将它们放回,删除放回的引用中的一半,回到步骤2.

基本上,这就像是二分查找,只不过它是一个“二分删除”。


2
我对VB6或任何相关技术都没有经验,但这是一个超级棒的答案! - blwy10
@blwy10:谢谢,那是一个“老狗”把戏。我们以前别无选择,只能用这种方法来调试问题。 - John Saunders
我尝试了“使用相同引用创建空解决方案”的技巧。令人恼火的是,它编译时没有错误;这让我怀疑在许可证被调用之前必须实际使用引用中的组件。我的问题是我不知道哪些组件来自哪些引用... - David Laing
@David Laing:还有可能未经许可的组件在表单上。表单控件由使用它们的各个表单引用,并且不会显示在项目引用下。因此,您可能还想打开项目中的每个表单。如果表单上有未经许可的控件,则在第一次在IDE中打开该表单时会出现错误,如果我没记错的话。 - Mike Spross
1
抱歉,我本来想提到表单的 - 你至少需要创建具有相同控件的虚拟表单。希望当你打开出现问题的单个表单时能看到错误 - 之前你没有尝试过吗? - John Saunders

2
所有答案的链接都失效了...而且我们中的一些人仍在尝试维护或转换旧的VB6应用程序(或两者兼备)。
一个有点有用的工具是Microsoft的Mark Russinovich开发的Process Monitor(它直接从Microsoft.com获取并已存在多年)。它允许您监视全系统使用的所有资源,并将其过滤为单个资源、进程等。
有用的部分是启动程序,然后从工具栏(Ctrl-L)单击“过滤器”按钮。从那里开始,您需要添加规则。选择以“begins with”开头的路径,并将其设置为值“HKCR\Licenses”。这在HKEY_CLASSES_ROOT部分,其中包含Active-X组件许可信息。这些应该设置为“Include”。
单击确定,然后单击工具栏上的清除(Ctrl-X)以清除所有当前事件以重置状态。事件应该已经生成与该规则匹配的数据。
然后,调用您的构建。为了减少杂乱,我使用了以下命令:
"C:\Program Files (x86)\Microsoft Visual Studio\VB98\vb6.exe" /make /outdir 一旦编译运行,构建应该会失败并显示相同的消息,但是简单地打开Process Monitor,您就可以看到最后一个尝试读取并失败的密钥。说未找到的UUID是许可证应该驻留的UUID。
从那里,您可以:
1.如果您的许可证允许,请将该值从工作PC复制并安装到失败的PC中。
2.谷歌该ID,以查看如何获取正确的许可证的说明(例如从安装媒体中的一个.REG文件中安装它)。
3.以其他方式获取并安装许可证。
虽然它没有告诉您确切对应于该UUID的组件是什么,但它至少让您获得了特定的UUID,这比任何其他当前答案在其当前状态下都要进一步。

谢谢伙计!由于缺乏资源,我差点放弃了,但是这篇帖子非常准确。 - ThePretendProgrammer

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接