我可以阻止VB6 OCX控件在编译时生成OCA注册表项吗?

时间:2014-11-26 10:01:41

标签: windows-7 com vb6 activex

我们这里有一个用VB6编写的项目(是的,我知道......),它消耗了一些也用VB6(OCX文件)编写的ActiveX对象。

最近我们开始为这个项目使用构建服务器,并且在MSBuild Extension Pack的帮助下,我们设计了一个构建过程,它以正确的顺序编译库,控件和可执行文件,然后根据需要进行注册,然后取消注册所有内容,以便为下次运行留下干净的机器。

问题是每个编译运行都会在注册表中留下VB6编译器似乎需要的扩展类型库/对象缓存文件中的条目,并且当控件未注册时,这些条目被删除

即。对于每个具有指向OCX的CLSID条目的已注册组件,在我们用VB6编译项目之后,存在为OCA新生成的CLSID。

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

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

一些注意事项:

  • 构建计算机是Windows 7
  • 启用二进制兼容性,因此OCX控件的CLSID不会更改。
  • Reg-Free COM目前不是一个选项
  • 我们不能简单地注册控件并留下它们,因为我们想要运行这个项目的多个版本。

1 个答案:

答案 0 :(得分:-3)

关键是停止尝试处理像静态链接库这样的DLL(包括OCX)。您的构建过程不合适。

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

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

通常情况下,这些应该比应用程序代码更稳定,在这些代码中,更改由它们包含的业务逻辑更频繁地驱动。

即使其中一些必须包含业务逻辑,您仍然希望将它们视为单独的软件实体。尽量使它们与具有更高稳定性的库不同。

这需要比单一的“Bable塔”发展更多的纪律,但有很多奖励。一件事,建立时间更快。作为奖励,几乎所有这些源代码控制相关的问题都会因为修补和摆弄的速度更快而消失。