2014-03-05 188 views
0

我明智地创建了一个安装程序,用于使用进程内(DLL)COM-Server的Delphi应用程序。 我将Wise项目中的DLL配置为“不要注册”,但是在测试安装之后它仍然被注册?WISE - COM服务器注册选项“不注册”不起作用?

enter image description here

这是明智的“无证功能”还是我做错了什么?

有没有人有解决方法或解决此问题?

P.S.我不想注册该DLL的原因是,在目标PC上,COM服务器已经可以为其他应用程序注册具有特定设置(线程模型,路径等)的我不想触摸的目标PC。

回答

1

我发现了一个可能的解决方案或解决方法(可能是因为我我以前不理解它,直到结束,但它的工作)。

COM DLL将目标电脑上注册,即使是标有如果登记部署PC上的“不注册”,以备不时之需。 解决方案:

  • 从本地(部署)未注册的DLL PC
  • 从安装包中删除,保存(和编译)封装
  • 再添加COM DLL来包装,用其标记为“不注册“,保存并编译。

完成这些步骤后,按预期方式工作 - DLL未在目标PC上注册。

看来,这是因为Windows安装程序的广告发生(这还是我没有正确理解),但是从WISE的文档,我发现:

“如何自注册信息被捕获 当您添加含COM自注册信息给 安装一个.DLL 或.OCX文件,它的注册信息被扫描,并且 相应注册表项添加到安装。此注册系统 比安装时在 安装时让文件自注册更为强大,因为它不依赖目标计算机上其他 文件的存在或.OCX或.DLL文件 对自身的依赖程度。 。-registration约定”

为此作为附加措施之前,上述步骤,我改变WISE广告选项:

Wise > Tools > Options ... Advertising tab

对于Advertising Setting:选择Do not scan advertising information选项。
未选中选项Automatically add self-registration


这一切都写得实际的解决方案,但由于@Christopher画家响应我在“DLL地狱”术语被引入,特别是对COM DLL文件,以便为长期的解决方案(透视)我会检查注册免费激活COM组件link)。

+1

是的,如果你私下部署你的DLL并使用RegFree COM,你已经隔离了这个组件,并解除了DLL的地狱冲突。这将是一个更好的设计。 –

3

我试图避免这变成了“我应该使用线程的工具”。也就是说,WiX/IsWiX是免费的开源软件,应该可以满足您的需求。 (这很难说,因为我不知道这个MSI会有什么其他要求。)

这就是说,有没有可能DLL已经被注册了?您是否在快照虚拟机或其他可重现的环境中进行测试,您可以100%确定它不是?

如果是这样,智慧脚本中是否还有其他任何可能导致注册的操作。我并不知道明智的缺陷/功能,但如果有的话,您就是SOL,因为该产品早已死亡,并且没有可用的支持或更新。

最后一个注释。你对这个DLL的评论可能已经存在并且被注册了......这叫做DLL地狱。如果它不在那里......现在你没有注册。无论您使用何种工具,在您希望获得高质量安装体验之前,您都需要解决一些设计问题。

+0

如果DLL未注册,则当前应用程序将从其路径注册它。这是因为它可能与已经使用并注册此DLL的另一应用程序(主应用程序,因为当前是辅助工具)一起安装在PC上。 – ALZ

+0

是的,我在真正的和虚拟的电脑上测试了DLL,它根本没有注册DLL,或者在安装之前未注册,并在注册之后得到注册......看起来这是明智的“功能” – ALZ

+0

或者在你不明智的脚本中有单独的操作不占。尝试创建一个全新的脚本,只需安装一个没有注册的文件即可确认。我认为这首先是错误的,因为我可以想出许多方法使其失败。 –