在.NET中创建和部署ActiveX控件

时间:2008-11-18 16:45:43

标签: .net installation activex browser

由于显然没有Flash control that can accept bitmap pastes,我想考虑自己写一个。我宁愿不使用Flash,所以我想使用.NET。

现在我相信可以在浏览器中下载和运行的本机代码控件的正确术语是“ActiveX控件”。所以我的问题是,我可以用.NET创建这样的ActiveX控件吗?

我在网上找到了一些教程,但是他们都希望你在本地机器上安装程序集,并注册并信任它和访问它的网站。

这对潜在的匿名互联网用户要求多一点,甚至对于内联网用户来说,另一种部署方法也会更受欢迎。

我清楚地记得有些网站要求我下载这个或那个ActiveX控件。在需要像Flash和Java这样的浏览器插件的页面上,有一些机制可以让浏览器知道在哪里获取该媒体类型的插件。

所以我的问题有两个:

  • 我可以在.NET中创建一个可以在用户浏览器中运行的控件吗?
  • 我可以实现的(半)自动投递的最佳方法是什么?

回应Sunny:

是的,许多JavaScript富文本编辑器允许您将链接图像粘贴到文本字段中,并且它将插入正确的< img>标签。但是,这仅适用于已经在网络上有位置的图像,我希望通过从剪贴板复制/粘贴任何随机位图来上传新图像。

3 个答案:

答案 0 :(得分:5)

如果你只使用IE浏览器,我喜欢IE托管控件的安全模型而不是Active-X,但是,截至2009年1月1日,微软不赞成使用.NET(正在进行中)来扩展IE所以XBAP没问题,但在ActiveX控件或IE Hosted控件中没有。

更新7/13:Microsoft已发布guidance on implementing in-process extensions;它仍然被弃用。

编辑:无需调整注册表,IE8只会从内部网或受信任区域加载.NET托管控件,因此对于一般的互联网使用,浏览器内完全信任访问需要Active-X。

跟进Russ的帖子:Silverlight无法访问剪贴板:http://silverlight.net/forums/t/13024.aspx

大多数IE托管的控制信息都在博客中,因此我使用:http://www.google.com/search?q=ie+hosted+control+site:msdn.com来查找它们。以下是我发现特别有用的内容。

快速轻松控制:http://blogs.msdn.com/mikechr/archive/2006/11/28/writing-a-simple-managed-control-under-ie.aspx

关于安全性的奇怪之处,除非“证据”是一个url,程序集可能是可信的,但不是域,需要断言来修复:http://blogs.msdn.com/carloc/archive/2006/11/01/code-access-security-hosting-control-in-ie.aspx

这是“固定”在3.5中的清单。要做到这一点很复杂,请参阅Shawnfa的.NET安全博客清单中有关.NET 3.5 Betapost GA .NET 3.5的说明。托德的随机发现博客也记录了steps for creating a manifest for a hosted control

我发现这对于设置安全性的知识库文章非常有用,但您仍需要了解CAS:http://support.microsoft.com/kb/892466。在决定使用(.net)Active-X与IE托管控件时,这可能是主要考虑因素 - 也就是说,哪种安全模型最适合您和您的用户。我希望使用manifest会使IE托管控件像click-once一样工作,要求用户“信任”并且系统会创建正确的设置。对于我的公司,我们使用可以自动为用户设置安全性,因此我们可以选择托管。

我从未想到的一件事是,如果我做了或者不必继承(用户)控件来进行无u控制。这对我来说效果更好,但我必须“隐藏”对象标签所在的div。

如果您编译调试并且在获得控件加载后连接到IE以进行“托管”调试,则可以轻松调试控件。如果无法加载控件,请在fusion程序集绑定查看器中查找信息:http://msdn.microsoft.com/en-us/library/e74a18c4.aspx以及如何打开IEHost跟踪:http://support.microsoft.com/kb/313892以调试加载过程。

确保对每个版本的程序集进行版本控制。如果你不这样做,那么IE会感到困惑,当下载缓存中的程序集不同但版本号与url引用的版本相同时(gacutil / cdl清除.net下载缓存)时,它将不会加载控件/ p>

答案 1 :(得分:2)

查找“在IE中托管的Winforms”。几年前我不得不做类似的事情,那就是我最终能够取得一些成功的方式。

有两点需要注意:正如您可能已经注意到的那样,这些问题并不经常出现,因此示例有限。 (我不再有任何分享,抱歉)。此外,.NET的安全模型与基于COM的ActiveX有很大不同,因此在IE的不同安全区域中使用它将会有点棘手。

如果你有能力使用Silverlight 2,我很可能会朝那个方向倾斜。

答案 2 :(得分:0)

使用ActiveX仅限于IE和Windows。最好看看谷歌文档和/或Gmail,看看他们如何使用javascript处理粘贴您的电子邮件/在线文档中的图像。适用于大多数浏览器和操作系统。