Windows 7 我是否可以防止VB6 OCX控件在编译时生成OCA注册表项?

Windows 7 我是否可以防止VB6 OCX控件在编译时生成OCA注册表项?,windows-7,com,vb6,activex,Windows 7,Com,Vb6,Activex,我们这里有一个用VB6编写的项目(是的,我知道…),它使用一些同样用VB6(OCX文件)编写的ActiveX对象 最近,我们开始为这个项目使用一个构建服务器,在的帮助下,我们设计了一个构建过程,该过程按照正确的顺序编译库、控件和可执行文件,适当地注册它们,然后注销所有内容,以便为下一次运行留下一台干净的机器 问题在于每次编译运行都会在注册表中为VB6编译器似乎需要的扩展类型库/对象缓存文件保留条目,并且在注销控件时不会删除这些条目 i、 e.对于具有指向OCX的CLSID条目的每个注册组件,在我

我们这里有一个用VB6编写的项目(是的,我知道…),它使用一些同样用VB6(OCX文件)编写的ActiveX对象

最近,我们开始为这个项目使用一个构建服务器,在的帮助下,我们设计了一个构建过程,该过程按照正确的顺序编译库、控件和可执行文件,适当地注册它们,然后注销所有内容,以便为下一次运行留下一台干净的机器

问题在于每次编译运行都会在注册表中为VB6编译器似乎需要的扩展类型库/对象缓存文件保留条目,并且在注销控件时不会删除这些条目

i、 e.对于具有指向OCX的CLSID条目的每个注册组件,在我们使用VB6编译项目后,存在一个新生成的OCA CLSID

因为我们在每次构建之后都会注销OCX控件,并且每次都会重新生成OCA CLSID,所以OCA条目的数量会继续增长

有人知道这些条目的原因吗?我们是否可以通过某种注销过程删除它们,或者我们是否可以首先阻止创建它们

请注意:

  • 构建计算机是Windows7
  • 二进制兼容性已启用,因此OCX控件的CLSID不会更改
  • 注册免费COM当前不是一个选项
  • 我们不能简单地注册控件并将其保留,因为我们希望运行此项目的多个构建

关键是停止尝试将DLL(包括OCX)视为静态链接库。您的构建过程不合适

虽然VB6支持粗略的“项目组”功能,但这仅适用于小型非结构化开发工作,如雷达下业务部门编码人员使用的开发工作

相反,努力在EXE项目中保持以应用程序为中心的逻辑。将长期可重用逻辑分解到DLL和OCX项目中,这些项目被视为独立的、独特的内部产品。将这些(包括源代码控制)与消费应用程序完全分开维护

通常,它们应该比应用程序代码稳定得多,应用程序代码中的更改更频繁地由它们所包含的业务逻辑驱动

即使其中一些必须包含业务逻辑,您仍然希望将它们视为独立的软件实体。尽量使它们与更稳定的库区别开来


这比单一的“语言之塔”开发需要更多的纪律,但也有很多回报。一方面,构建时间更快。另外,对于修补和篡改率更高的应用程序,几乎所有这些与源代码管理相关的问题都消失了。

由于我对msbuild扩展缺乏了解,我们在“正常”构建过程中必须做的事情(虽然不是从ide开始,但我们有批处理工作)我们必须为我们的控件和com dll提供二进制兼容性文件。我们从未注销过它们,而且我们有一个干净的注册表(好的,大多数时候…),这就是我们对构建服务器所做的。二进制兼容文件是源存储库的一部分,与其他所有文件一起关闭。不幸的是,如果您想移动位置(在我们的例子中,开发、UAT和发行版配置编译到不同的输出文件夹-根据在开发输出中注册的控件构建发行版确实是非常糟糕的),取消注册它们是必不可少的。这并不能解决当前的问题。如果我想改变信仰,我会去问programmers.stackexchange.com。有趣的是,我没有要求人们为我签约的团队的不良行为辩护。我在问是否有人知道是什么导致了我所描述的问题。你的否决票从根本上违背了stackoverflow的原则。@Bob77-告诉某人重写他们的项目并不能回答这个问题。他们很可能无权做出这样的决定。如果你不允许讨论如何组织项目,我看不到任何编程问题。因此,在这种情况下,整个问题就成了stackoverflow的话题。至于回答这个问题,这个网站是作为一个永久的参考,而不是一次性的个人问答。我看到了一个关于创建意外/不需要的注册表项的相当明确的问题。当然,这不是一个语言语法问题,但是我们有开发环境的标签和关于它们行为的问题,所以我不认为这不合适。