gpt4 book ai didi

c# - 在 CAB 中部署 C# ActiveX 以供 Internet Explorer 使用

转载 作者:可可西里 更新时间:2023-11-01 08:03:19 25 4
gpt4 key购买 nike

我拼命地尝试将用 C# 开发的 IE 的 ActiveX 部署为 CAB 存档。我已经阅读了很多资源(其中一些来自 StackOverflow),似乎很多人都遇到了同样的问题。我尝试了 3 种解决方案:a) 创建 CAB VS 项目,b) 使用 CABARC 手动创建 CAB在 INF 中注册 COM 和 c) 手动创建 CAB 并启动 msiexec .他们都没有工作。我什至尝试过 d) 创建一个 bootstrap 来启动 msiexec无济于事(因为有些人建议在 Vista 上简单地启动 msiexec 行不通)。

我正在运行 Windows Vista,但我的项目即使在 XP 上的 IE6 上也无法运行。

当我使用 MSI 安装 ActiveX 时,在所有 Windows 上一切正常。显然 CAB 的事情不起作用,我还找不到调试整个过程的正确方法。

任何帮助表示赞赏。

最佳答案

更新:请注意,这个古老但出色的答案仍然是如何解决这个问题的一个很好的概述,至少与 Win7 和 IE11 的演进规模一样。我刚刚使用 Answerer 的 Firebreath.org 工具集作为起点,成功地完成了所有工作。这并不简单,但可以做到。我在下面的引用列表中添加了对该项目的引用,因为它可能比此概述更适合当前的开发人员。

万岁 - 我刚刚完成了一个相同的项目,所以你会很高兴知道它实际上是可能的。我只在 XP 上测试过 - 我知道可能存在 Vista/7 不允许的问题 msiexec被称为。

鉴于您有一个正确公开 COM 接口(interface)的程序集,我执行了以下操作:

  • 强命名程序集。
  • 创建了一个 INF 文件
  • 使用 Visual Studio 2008“安装项目”模板创建了一个 MSI。
  • 使用与 Windows XP 捆绑的“iexpress.exe”创建了一个 CAB 文件。

  • 创建 INF 文件

    我使用的 *.inf 文件看起来像:
    [version]
    signature="$CHICAGO$"
    AdvancedINF=2.0

    [Setup Hooks]
    install=install

    [install]
    run=msiexec.exe /package """%EXTRACT_DIR%\SampInst.msi""" /qn

    您唯一需要更改的是 SampInst.msi .注意我会使用 8.3 文件名,因为长文件名会导致问题。在测试时,我也不会使用 qn 开关,因为这是一个静默安装。

    创建安装程序

    安装程序只需要做一件事,那就是通过调用 RegAsm 来注册程序集。大多数安装程序会提供一些方法来轻松做到这一点。例如,通过 VS 2008 创建的安装程序只需要将程序集的“注册”属性设置为“vsdrpCOM”。请注意 vsdrpCOM 应该选择它,因为它会在构建时生成适当的注册表项。 vsdrpCOMSelfRegistration 设置可能会失败,因为它在运行时调用 RegAsm,因此不适用于非管理员。

    将安装程序打包成 CAB 文件

    这可以由任何 cab 存档器完成。 Windows XP 包含 iexpress.exe,一个向导驱动的归档程序,而 Microsoft 的 CAB SDK 包含 cabarc.exe。其他 3rd 方工具也可用。
    请注意,如果您要对 CAB 进行签名,则需要在 CAB 文件中为代码签名保留空间。

    您将需要对 INF 文件和 MSI 文件进行 CAB。您将不需要 CAB Setup.Exe 文件。

    方便的提示:VS2008 安装项目项目类型允许您在属性中设置构建后步骤,因此您可以在一个步骤中构建和 CAB。我的构建后步骤如下所示:
    cd "$(ProjectDir)"
    "%WINDIR%\System32\Makecab.exe" /f "VboCslib.ddf"

    DDF 文件格式为 documented .

    示例 HTML 页面

    对象标记用于指向包含安装程序的 cab 文件。将部署 ActiveXControl 的一个非常简单的 HTML 页面将是:
    <html>
    <head></head>
    <body>

    <!--
    ID : The id of the ActiveX control to be used in JavaScript.
    CLASSID : The GUID associated with the ActiveX control.
    CODEBASE: The location containing the CAB installer for the ActiveX
    control. This could be a URL, or a relative path.
    -->
    <OBJECT ID="MyActiveXControl"
    CLASSID="CLSID:FC36FAE1-48E0-4f6b-B469-E1B5A8C6D1AC"
    CODEBASE="cabfiles\SampleCabFile.CAB#version=1,0,0,0">
    </OBJECT>

    <script>
    MyActiveXControl.SomeMethod();
    </script>
    </body>
    </html>

    方便的提示
  • 确保您的安装程序基于“每个用户”而不是“每个机器”进行安装。如果用户没有管理员权限,这将使其更有可能安装。

  • 故障排除

    Internet Explorer 6 实际上提供了非常有用的诊断帮助。清除 Internet 临时文件,然后导航到网页。如果安装不起作用,请转到 Internet 临时文件,您将在其中看到几个文件。其中之一将是一个以 ?CodeDownloadErrorLog 开头的错误日志。将它拖到您的桌面并在记事本中打开它,它会提供有关失败时尝试执行的操作的详细信息。

    引用
  • Microsoft KB247257 – 签署 .cab 文件的步骤
  • MSDN – 关于 INF 文件架构
  • SN.EXE - 具有强名称的代码强程序
  • Nikolkos Craft – 如何:部署 .NET ActiveX 控件
  • CodeProject – 一步一步创建 ActiveX .NET
  • CodeProject – 通过 CAB 文件下载 C# ActiveX 组件
  • MSDN - ALLUSERS 属性 (Windows)
  • MSDN – 非管理员 ActiveX 控件
  • MSDN – 微软内阁格式

  • 更新: Firebreath.org有一个工具集,用于为许多平台生成浏览器插件。解决这里提出的问题的 IE/ActiveX 代码只是一个子集。但截至 2014 年 11 月 6 日,我发现开始使用 Firebreath 及其说明比尝试构建我的开发环境并从头开始推出我自己的所有解决方案更容易。

    关于c# - 在 CAB 中部署 C# ActiveX 以供 Internet Explorer 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484326/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com