【问题标题】:Creating and deploying an ActiveX control in .NET在 .NET 中创建和部署 ActiveX 控件
【发布时间】:2008-11-18 16:45:42
【问题描述】:

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

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

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

这对潜在的匿名互联网用户要求有点高,甚至对于 Intranet 用户来说,另一种部署方法会更可取。

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

所以我的问题是双重的:

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

回应桑尼:

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

【问题讨论】:

  • 我真的建议避免对剪贴板功能进行黑客攻击,除非它绝对是您的网络应用程序的核心功能。

标签: .net installation activex browser


【解决方案1】:

如果您只使用 IE,我喜欢 IE 托管控件在 Active-X 上的安全模型,但是,截至 2009 年 1 月 1 日,Microsoft 不赞成使用 .NET(正在进行中)来扩展 IE,因此XBAP 可以,但在 ActiveX 控件或 IE 托管控件中不行。

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

编辑:无需调整注册表,IE8 只会从 Intranet 或受信任区域加载 .NET 托管控件,因此对于一般 Internet 使用,浏览器内完全信任访问需要 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 的使用清单的说明。 Todd 的 Random Discovery 博客也记录了 steps for creating a manifest for a hosted control

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

我从未想过的一件事是我是否必须从(用户)控件继承来获得无 ui 控件。这样做对我来说效果更好,但我不得不“隐藏”对象标签所在的 div。

如果您为调试而编译并在加载控件后附加到 IE 以进行“托管”调试,则调试控件很容易。如果无法加载控件,请在融合程序集绑定查看器上查找信息:http://msdn.microsoft.com/en-us/library/e74a18c4.aspx 以及如何打开 IEHost 跟踪:http://support.microsoft.com/kb/313892 以调试加载过程。

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

【讨论】:

    【解决方案2】:

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

    需要注意的两点:您可能已经注意到,这个问题并不经常出现,因此示例有限。 (我不再有任何分享,对不起)。此外,.NET 的安全模型与基于 COM 的 ActiveX 有很大不同,因此要让它在 IE 的不同安全区域中工作会有点棘手。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我想知道 gmail 和 gdocs 中的图像粘贴是否仅在 HTML5 浏览器中支持?
      猜你喜欢
      • 2014-10-23
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2011-08-05
      相关资源
      最近更新 更多