更新:请注意,这个古老但优秀的答案仍然是如何解决此问题的一个非常好的概述,至少沿着 Win7 和 IE11 的进化规模。我刚刚使用 Answerer 的 Firebreath.org 工具集作为起点,成功地使这一切正常工作。这并不简单,但可以做到。我已将对该项目的引用添加到下面的参考列表中,因为它可能为当前开发人员提供比此概述更合乎逻辑的起点。
万岁 - 我刚刚完成了一个相同的项目,所以你会很高兴知道它实际上是可能的。我只在 XP 上测试过 - 我知道可能存在 Vista/7 不允许的问题msiexec
被称为。
鉴于您有一个正确公开 COM 接口的程序集,我执行了以下操作:
- 强命名大会。
- 创建了一个 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 创建的安装程序只需将程序集的“Register”属性设置为“vsdrpCOM”。注意vsdrpCOM应该选择它,因为它在构建时生成适当的注册表项。 vsdrpCOMSelfRegistration 设置可能会失败,因为它在运行时调用 RegAsm,因此不适用于非管理员。
将安装程序打包成CAB文件
任何出租车归档员都可以完成此操作。 Windows XP 包含 iexpress.exe,一个向导驱动的归档程序,而 Microsoft 的 CAB SDK 包含 cabarc.exe。其他第三方工具也可用。
请注意,如果要签署 CAB,则需要在 CAB 文件中预留空间用于代码签名。
您将需要 CAB INF 文件和 MSI 文件。您不需要 CAB Setup.Exe 文件。
方便的提示:VS2008 安装项目项目类型允许您在属性中设置构建后步骤,以便您可以在一个步骤中构建和 CAB。我的构建后步骤如下:
cd "$(ProjectDir)"
"%WINDIR%\System32\Makecab.exe" /f "VboCslib.ddf"
DDF 文件格式为有记录的 http://msdn.microsoft.com/en-us/library/bb417343.aspx#dir_file_syntax.
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 开头的错误日志。将其拖到桌面并在记事本中打开它,它将提供有关失败时尝试执行的操作的详细信息。
参考
-
微软KB247257 http://support.microsoft.com/kb/247257– 签署 .cab 文件的步骤
-
MSDN http://msdn.microsoft.com/en-us/library/aa741215%28v=vs.85%29.aspx– 关于INF文件架构
-
SN.EXE http://visualbasic.about.com/od/usingvbnet/a/FWTools5.htm- 使用强名称编写强程序
-
尼科尔科斯工艺 http://nikolkos.blogspot.com/2009/08/howto-deploy-net-activex-control.html– 如何:部署 .NET ActiveX 控件
-
代码项目 http://www.codeproject.com/KB/cs/CreateActiveXDotNet.aspx– 逐步创建 ActiveX .NET
-
代码项目 http://www.codeproject.com/KB/cs/C__Deployment.aspx– 通过CAB文件下载C# ActiveX组件
-
MSDN http://msdn.microsoft.com/en-us/library/aa367559%28v=vs.85%29.aspx- ALLUSERS 属性(Windows)
-
MSDN http://msdn.microsoft.com/en-us/library/dd433049%28v=vs.85%29.aspx– 非管理 ActiveX 控件
-
MSDN http://msdn.microsoft.com/en-us/library/bb417343.aspx– 微软内阁格式
Update: Firebreath.org http://www.firebreath.org/有一个用于为许多平台生成浏览器插件的工具集。解决这里提出的问题的 IE/ActiveX 代码只是一个子集。但截至 2014 年 11 月 6 日,我发现开始使用 Firebreath 及其说明比尝试构建我的开发环境并从头开始推出我自己的所有解决方案更容易。