【问题标题】:Packaging ActiveX Controls with Wix MSI [closed]使用 Wix MSI 打包 ActiveX 控件
【发布时间】:2014-10-08 10:03:55
【问题描述】:

我需要使用 Wix 创建 MSI。我的应用程序有 Active X 控件。当任何用户连接或访问 Web 上的 URL 时,我的应用程序需要安装在用户计算机中。 我需要安装的路径是C:\Windows\Downloaded Program Files\CONFLICT.xx,这个文件夹应该包含文件ATL80.dll、app.dll、MSVCP80.dll MSVCR80.dll。 我看了几篇文章,但对它们感到困惑。请让我知道如何开始,以及我需要遵循哪些步骤才能制作 MSI。

【问题讨论】:

  • 请告诉我们你做了什么。表现出一些努力
  • 您介意添加评论来说明您提出的解决方案吗?
  • 我完全按照 Glytzhkof 以下评论中给出的说明进行操作。它奏效了。

标签: wix installation windows-installer activex


【解决方案1】:

还有更多内容:Packaging ActiveX Controls

基本上,网页将请求通过CODEBASE URL下载和安装签名的出租车,如下所示:

(上面链接的 Microsoft 文章中的示例)

<OBJECT CLASSID="clsid:dcf0768D-ba7a-101a-b57a-0000c0c3ed5f"
    CODEBASE="http://webserver/time.cab"
    ALIGN="CENTER" WIDTH=270 HEIGHT=26 ID="T1"><PARAM NAME="Interval" VALUE=1000>
    <PARAM NAME="Enabled" VALUE=1></OBJECT>

请求的 cab 已下载 (time.cab) 并安装(标准 Microsoft cab 安装/提取)。下次打开网页时,Active X 控件应该会按预期工作。这是正常情况(需要管理员权限才能工作)。可以在此处捕获成功安装并将其打包为 MSI。但是,由于完成安装涉及所有证书,因此需要进行大量清理。我记得 MSI 中不需要任何证书,因为 MSI 以管理员/提升权限运行并直接在文件夹中转储文件。如果您问我,这是一个相当大的安全问题,但这些出租车很少以这种方式部署。但是,未签名的 cab 文件将不起作用(除非 IE 是自定义的)。

在此用户案例中创建的 CONFLICT 文件夹 表明从 cab 安装的文件与网页指定和预期的文件版本之间存在差异。这会导致 IE 触发新的 CAB 下载。当发现C:\Windows\Downloaded Program Files\ 中已经存在相同的文件时,每次都会创建一个新的 CONFLICT 子文件夹,并且每次打开页面时都会提示用户安装新的 Active X。

您必须努力解决网页指定的文件版本以及在 cab 中找到的文件版本。这些版本必须匹配。我不记得所有细节,但可能只检查了 CAB 文件版本:

(Sample from this Microsoft article)

<object id="CommonDialog1" width="32" HEIGHT="32"
    classid="CLSID:F9043C85-F6F2-101A-A3C9-08002B2F49FB"
    codebase="http://activex.microsoft.com/controls/vb5/comdlg32.cab
    #Version=1,0,0,0">
</object>

【讨论】:

  • 谢谢你这么好的解释。它给了我前进的基本思路。
【解决方案2】:

这确实是一个关于 Visual C++ 可再发行组件的问题,因为从网页安装的 ActiveX 控件不需要通过 MSI 安装。如果这就是您所做的一切,那么简短的回答是您获取 VC 2005 可再发行组件并运行它,这样的事情:

http://www.microsoft.com/en-us/download/details.aspx?id=3387

这会将 C++ 支持文件(如 ATL80.dll 等)安装在正确的位置,并且可以正常工作。你对他们的去向没有太多发言权:

http://msdn.microsoft.com/en-us/library/ms235316(v=vs.80).aspx

拥有这些 Dll 的私有版本是很危险的,因为它们有安全修复程序,如果您有一个 MS 安全更新无法找到和修复的私有副本,那么您实际上需要负责在客户端上维护它们系统。

另一方面,我无法从您的问题中确定您是否有一个单独的 MSI 文件,其中包含许多其他内容(不是 ActiveX),您希望通过让人们下载它来安装它。

【讨论】:

  • 除了运行时问题,还有通过网页部署 Active X cab 的古怪世界:Packaging ActiveX Controls。看我的回答,可能缺少一些细节。
  • 我知道这一点,但关键是这里似乎根本没有 WiX 或 MSI 问题,问题似乎是关于将 VC++ 运行时安装到系统上。这不是很清楚,但我想也许他知道如何将 AX 控件打包在网页中,并且只需要系统上的 VC_++ 运行时。对问题的更新可能会解决该问题。
  • 冲突文件夹仅在 cab 安装出现问题时显示。他应该尝试捕获此安装而不是使用 Wix。
  • 总结一下(我今天又遇到了这个问题):ActiveX 安装可以被捕获并作为 MSI 重新分发,以避免所有用户都必须使用管理员权限手动安装 ActiveX 控件。我已经这样做了好几次,并且知道它可以工作(除非在 web 浏览器中对 ActiveX 安装的处理发生了变化)。如果您具有管理员权限,则有效地在首次启动/安装和安装时验证签名的 ActiveX。如果您捕获此过程并且网页询问您安装的文件的版本,则所有提示都会消失并加载控件。
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多