我明智地创建了一个安装程序,用于使用进程内(DLL)COM-Server的Delphi应用程序。 我在Wise项目中将DLL配置为“不注册”,但是在测试安装后它仍然被注册了?
这是WISE的“未记录的功能”还是我做错了什么?
是否有人针对此问题制定了解决方法或解决方法?
P.S。我不想注册DLL的原因是在目标PC上,COM服务器已经可以为具有特定设置(线程模型,路径等)的其他应用程序注册,我不想触摸它。
答案 0 :(得分:3)
我试图避免这种情况变成“我应该使用什么工具”。也就是说,WiX / IsWiX是免费的开源软件,应该可以满足您的需求。 (这很难说是肯定的,因为我不知道这个MSI会有什么其他要求。)
那就是说,DLL是否已经注册了?您是在快照VM还是其他可重现的环境中进行测试,您可以100%确定它不是?
如果是这样,明智的脚本中是否有任何可能导致注册发生的其他操作。我没有意识到明智的错误/功能,但如果有,你就是SOL,因为该产品早已死亡,并且没有可用的支持或更新。
最后一点。你评论DLL可能已经存在并注册了......那就是DLL地狱。如果它不存在怎么办...现在你没有注册。在您希望获得高质量的安装体验之前,无论使用何种工具,您都需要解决一些设计问题。
答案 1 :(得分:1)
我找到了一个可能的解决方案或解决方法(可能因为我直到最后都不理解它,但它正在工作)。
COM DLL将在目标PC上注册,即使它标记为“不注册”,以防它在部署PC上注册。 解决方案:
执行这些步骤后,它按预期工作 - DLL未在目标PC上注册。
似乎这种情况正在发生,因为Windows安装程序广告(我仍然不能正确理解),但是从WISE文档我发现:
“如何捕获自我注册信息 添加.DLL时 或包含COM自注册信息的.OCX文件 安装,其扫描和注册信息 适当的注册表项将添加到安装中。这个系统 注册比让文件自我注册更健壮 安装时间因为它不依赖于其他的存在 目标计算机上的文件或.OCX或.DLL文件的程度 坚持自我注册惯例。“
出于这个原因作为额外措施,在上述步骤之前,我改变了WISE广告选项:
选择Advertising Setting:
Do not scan advertising information
选项
未选中选项Automatically add self-registration
。
所有这些都是实际的解决方案,但是由于@Christopher Painter的反应,我在“ DLL Hell ”术语中被引入,特别是对于COM DLL,因此作为 LONG-TERM解决方案(透视)我会检查免费注册COM组件(link)。