【发布时间】:2020-02-25 23:23:06
【问题描述】:
我使用 heat 生成了一个包含注册表项的文件,并在 Visual Studio 中创建了一个 wix 项目。我尝试将片段直接包含在 product.wxs 中,并将其作为组件组引用。当我执行安装程序时,没有任何反应。要测试是否正确添加了 ActiveX 对象,在 Internet Explorer 中,new ActiveXObject('<prog ID>') 应该可以工作,但不能。我猜注册表项是不够的。如何添加 ActiveX 对象创建的.dll 并确保 Internet Explorer 可以定位到 ActiveXObject?
根据我的评论:这是我正在尝试做的示例 repo。我创建了一个带有 COM 可见函数的类库。这有一个带有“ActiveXExample”的 ProgId,并且应该能够通过 WiX 创建的 ActiveXExampleInstaller .msi 安装到机器上。我运行安装程序,发现没有添加任何注册表项或文件。我很确定这是目录结构的问题,但我仍然不明白如何添加文件。 https://github.com/SvenWritesCode/ActiveXExample
【问题讨论】:
-
这方面有什么更新吗?我对建议将核心 COM 对象标记为安全的脚本编写有点不太高兴。这确实是必须由安全人员运行的东西。 IE11 完全锁定是有充分理由的......
-
这可能只是 x86 与 x64 的问题。我过于简单化了,但是如果您使用 32 位 IE,则必须将您的 COM 对象(ActiveX = COM)注册到 32 位注册表中,如果您使用 64 位 IE,您必须将您的 COM 对象注册到 64-位注册表,如果要同时使用两者,则必须在两个注册表中进行注册。 => 这可能只是意味着您必须构建两个 MSI:一个用于 x86 设置,一个用于 x64。
-
64 位 MSI 文件可以安装 32 位和 64 位组件,但是这样的包不能在 x86 机器上运行。因此,如果您永远不需要在真正的 x86 机器上安装,您可以构建一个 MSI。请注意,WiX 在 x64 COM 文件方面存在一些问题(除非已修复 - 请参阅下面有关 WiX 和 COM 注册的链接)。
-
@SteinÅsmul 该应用程序目前用于无法访问 Internet 的本地 Intranet,因此即使将
FileSystemObject标记为安全也可能会起作用,但仍然存在太大的安全风险。我的想法(如果我错了,请纠正我)是创建我自己的具有相同功能的 Active X 对象,然后能够将其安装到客户端计算机上,这将是一个更好的主意。 -
我想这可能行得通,但我会使用 VB6 或 C++ 来制作真正的 COM 对象,而不是为 COM 互操作注册的 .NET 程序集?我不是该技术的专家,而且它基本上已经过时了,因为我重复了太多次:-)。
标签: visual-studio wix windows-installer activex