我从一些我负责更新的同事那里继承了一些代码。我在.NET出现之前编写代码的经验很少,所以我对COM和ActiveX之类的东西并不十分熟悉。
以下是代码类似的内容:
[Guid("0B84013E-A3D3-1f2f-5E61-4646813BF5DE")]
public interface IGenerator
{
string GenerateFileName();
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("D499F7A6F-BAC2-4604-BF12-10481C07E924")]
public class Generator : IGenerator
{
public string GenerateFileName() {
// implementation details not important
return "abcdef.xyz";
}
}
项目生成一个使用regasm在机器上注册的dll文件:
regasm Generator.dll /tlb /codebase
我们有一个网站正在使用如下代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script type="text/javascript" language="javascript">
function Frob() {
var as = new ActiveXObject("Test.Generator");
var fn = as.GenerateFileName();
}
</script>
...
<img src="foo.jpg" onclick="Frob()" />
代码的问题是: 1)没有签名 2)他们必须使用regasm
自行注册程序集我的任务是签署程序集并将其打包在CAB文件中,并将其放在网站上,以便提示用户以这种方式安装。
我到目前为止看到的教程告诉您将它打包在CAB中并将其放在网站上的OBJECT标记中:
http://msdn.microsoft.com/en-us/library/aa751974(v=vs.85).aspx
来自网站:
Microsoft Internet Explorer 4.0或更高版本以下列方式处理OBJECT对象和CODEBASE属性。
解析OBJECT对象并搜索CODEBASE属性。 如果缺少CODEBASE属性 或者以URL到对象开头 中的索引服务器 CodeBaseSearchPath,这个索引是 用于检索文件。
找到CODEBASE属性标识的.cab文件。
扩展.cab文件中的文件。
将扩展文件复制到用户的计算机(默认目录为\ windows \ occache)。
注册需要注册的对象和/或文件。
调用组件对象模型 (COM)CoCreateInstance函数 创建指定的实例 对象
我有一些问题/疑问:
我的控件实际上没有用户界面。仍然把它放在OBJECT标签中是否有意义?
我尝试将它放在object标签中并运行网站,它没有提示我安装任何东西。我如何让它工作?