websocket安全性 如何 认可 安全网站 activex,你的电脑不信任此网站的安全证书

一、如何将本站点加入信任站点 , 并允许ActiveX控件初始化
打开IE浏览器——工具——互联网选项——安全3354可信站点3354站点3354输出要添加的地址3354添加 , 并确认关闭 。我给你截图吧 。接下来 , 单击ActiveX控件 , 或者刚才的安全——可信站点 。自定义关卡 , 找到ActiveX控件和插件的大目录 。将以下小目录选项设置为启用 , 然后确认并退出 。

websocket安全性 如何 认可 安全网站 activex,你的电脑不信任此网站的安全证书

文章插图
二、如何让电脑上的安全设置允许使用Activex控件
右键单击IE , 选择属性 , 然后选择安全 。其中有一个安全级别定制 。点进去 , 找到控件 , 自己设置 。
三、如何让电脑上的安全设置允许使用Activex控件?
打开IE , 点击工具中的互联网选项(或者右击IElogo , 点击属性)-点击安全选项卡-点击自定义级别-选择Activex控件自动提示为“启用” 。
websocket安全性 如何 认可 安全网站 activex,你的电脑不信任此网站的安全证书

文章插图
四、如何设置安全允许安装ActiveX控件
【websocket安全性 如何 认可 安全网站 activex,你的电脑不信任此网站的安全证书】一般的控件都不是什么好东西 , 但是你很想装 。如果你是xp , 打开IE浏览器 , 上面的工具栏里有互联网选项 , 点击 , 然后选择第二个安全选项 。在你看到的第一个地球上 , 也就是互联网下 , 有一个自定义选项 。点一下 , 关于控件有很多选项 , 可以自己考虑!
五、计算机安全设置不允许网站使用您电脑上的ACTIVEX控件 , 怎么办?
一、ActiveX的由来ActiveXActiveX最初只是一个品牌名称 。它所涵盖的技术并不是孤立的 , 大多数都与互联网和Web相关 。更重要的是 , ActiveX的整体技术是由微软的COM(组件对象模型)构建的 。但是不要误以为ActiveX定义了所有基于COM的技术 。COM与微软Office和Windows以及微软现在做的一切都有关系 , 但显然这些产品并不是ActiveX家族的成员 。ActiveX成长于微软的复合文档技术——OLE 。OLE的最初版本只针对复合文档 , 但在OLE2的后续版本中 , 引入了COM 。COM是应OLE设计者的需求而诞生的 。它的基本出发点是通过一个总的组织 , 让一个软件为另一个软件提供服务 。所以COM的第一个用户是OLE2 。其实COM和复合文档没有太大的关系 。后来 , COM作为一种与复合文档完全无关的技术 , 开始被广泛使用 。因此 , 微软开始“染指”通用平台技术 。但COM不是产品 , 它需要一个品牌名称 。不幸的是 , 营销专家选择了“OLE”作为品牌名称 。于是 , 所有使用COM的技术开始被贴上OLE的标签 。当然 , 这些技术大多与复合文档无关 。微软想向人们解释:“OLE不仅仅是复合文档!”这需要相当多的精力和时间 。于是 , 1996年春天 , 微软改变主意 , 选择ActiveX作为新的品牌名称 。ActiveX指的是一组定义松散的基于COM的技术 , 而OLE仍然只指复合文档 。当然最重要的核心还是COM 。让对象模型完全独立于编程语言是一个非常新颖的想法 。从C和Java的对象上 , 可以了解一些 。但是所谓的COM对象是什么呢?为了便于理解 , COM可以看作是一种封装技术 , 即可以使软件的不同部分按照一定的面向对象的形式组合成交互的进程和一组支持库 。COM可以用任何语言编写 , 如C、Java和VB , 并且可以以DLL或作为不同进程工作的可执行文件的形式实现 。使用COM对象的客户端不需要关心对象是用什么语言编写的 , 也不需要关心它是在DLL还是其他进程中执行的 。从客户端的角度来看 , 没有区别 。这样的通用处理技巧非常有用 。比如用户协同运行的两个应用 , 可以把它们的共同操作实现为COM对象之间的交互(当然现在的OLE复合文档也可以做到) 。从Web服务器下载并在浏览器中执行的代码可以被浏览器视为COM对象 。也就是说 , COM技术也是封装可下载代码的标准方式(ActiveX控件执行这个功能) 。甚至应用程序与本机OS交互的方法也可以由COM指定(Windows和WindowsNT使用的大多数新API都被定义为COM对象) 。虽然COM起源于复合文档 , 但它可以有效地应用于许多软件问题 。二、ActiveX王国主动平台是微软的世界观 。其基本思想是:使用ActiveX控件建立一个自动化的组织 , 包括与用户交互并适应COM到Web服务器的事务监视器 。主动平台包括两部分:主动服务器和主动客户端 。活动服务器
实际上是中间层 。使用组件或Active服务器页面 , 来提供用于业务逻辑和主要应用处理的场所 。ActiveServer的技术 , 其核心是NT Server、Microsoft事务处理服务器、数据管理服务、目录服务、Web服务以及网络服务 。事务处理服务器是把线程产生和数据库多重化等传统的TP监控功能与Microsoft的基于组件的编程模型结合起来 。数据管理服务等Active平台的其他组件是用OLE DB和ODBC  , 访问DB2、Oracle、SQL Server等的数据源 。目录服务是在DCOM(Distributed COM , 分布式COM)的周围 , 提供目录服务层 , 这样使远程对象在网络上能相互搜索 。Web服务以Inter net信息服务器为中心进行构筑 , 它为服务器上的Web应用开发 , 提供脚本生成(Scripting )机构 。网络服务以DCOM为中心进行构筑 , 通过以同步MS-RPC为中介的网络 , 使之能够连接控件 。Active Client是一种交叉平台 。Microsoft的技术纵然是独家所有 , 但也希望将这种技术向多个OS开放 。具体实施计划是使用脚本引擎(Scripting Engine) 。这种脚本引擎是由标准的HTML和带有Microsoft特色的Java虚拟机(JVM)、Microsoft的VBScript与JSc ript所构成的 。Active Client组装进了Microsoft的IE 3.0和4.0 , 通过ActiveX , 可以变成用户的C/S应用的一部分 。从清一色采用Windows的企业用户来看 , Active平台可以提供坚固的、具有可缩放性的服务器应用开发平台 。ActiveServer在TP监视器这类高端产品的场合 , 也利用常见的一些工具和技术 。因此 , 小型工作组和Intranet应用不会超越Active Server的能力 。Acti ve平台的目标机虽是异种机环境 , 但由于过分依赖IE , 所以不能驱动客户端 。尽管在一些非Windows平台上也推出了Explorer , 但最好的支持、最新版本的Explorer还是在Window s上 。三、ActiveX的进展 1.向分布计算扩充 COM的最初版本假定COM对象及其客户端是在同一个机器上运行(可以在同一个进程内  , 也可以在不同的进程内) , DCOM是ActiveX家族中的重要成员 。后来 , 它在Windows 95中也能使用 。DCOM对于客户端制作COM对象、进行交互的方法没有做任何改变 。客户端使用完全相同的代码 , 可以访问本地以及远程对象 。但许多场合下 , 客户想使用少数的DCOM附件 。DCOM备有分布式安全保密机制 , 提供认证和数据加密 。在1998年要发布的Windows NT 5.0中 , 要将Kerberos等安全保密协议 , 追加到DCOM中 。DCOM已能够利用域名服务等简洁的目录服务 , 以用于搜寻在其他机器上的COM对象 。NT 5.0要追加对Acti ve Directory的支持 。Active Directory是基于域名服务和轻型目录访问协议的 。DCOM的劲敌 , 此前一直是OMG(Object Management Group)的CORBA(Common Object R equest Broker Architecture) 。它被组装进了Iona的Orbix和Visigenic的VisiBroker等产品中 。不久前 , 另一种支持分散对象的技术——Java的远程方法调用出台了 。无论是C ORBA , 还是DCOM , 都能在多种语言写的对象间进行通信 。而RMI却不同 , 它只限于在由Java 实现的对象间进行通信 。显然 , 这是个制约 。但RMI使用起来非常简单 。另外 , RMI的开发者可以用Java来设计协议规范 。因此 , 在语言的功能上 , 可以做得浑然一体 。若写一个只处理两三个客户端的DCOM服务器 , 还是比较简单的 。但是 , 要构筑一个高效处理几百、几千个客户端的DCOM服务器 , 则相当之难 。为了便于编写可缩放的DCOM服务器 , Microsoft发布了事务处理服务器(MTS) 。MTS在支持事务处理的同时 , 也提供自动生成线索和智能对象的重复使用等服务 。MTS使可缩放服务器的制作变得相当简单 。即使是无需事务处理的应用 , 使用MTS也有好处 。实际上 , M icrosoft鼓励人们用VB来写MTS应用 。这与开发业务服务器的传统手法不同 , 所有的MTS应用 , 都是作为一个以上的COM对象来编写 , 且必须以DLL来实现 。一般情况下 , 客户端看不到 MTS 。客户端只管一如既往地制作、使用COM对象即可 。2.组件的标准化 基于组件的应用开发 , 其方法和组装电子装置一样 , 可以用已制作好的组件部件来构筑应用 。桌面用的、基于COM的组件叫做ActiveX控件 。所谓ActiveX控件不过是遵从一定的标准、与客户端交互的COM对象而已 。例如 , ActiveX控件必须通过Automation (即使用dispinterfaces)来公开方法 。用这个被标准化的交互功能 , 可以在多个不同的上下文中 , 使用同一个控件 。在这个标准接口的”幕后” , ActiveX控件几乎是什么都能执行 。现在 , 许多软件公司都能提供实现各种功能的控件 。ActiveX控件是作为DDL编写的 , 为此 , 必须装载到某个容器中 。ActiveX控件的原型容器是VB , 除此之外 , 还有多种容器可供选择 。目前 , 一个非常重要的控件容器是Microsoft 的Web浏览器 现在所谓ActiveX控件的那些内容 , 是实现许多方法所必须的 。已经把它们从机器的本地硬盘移到了VB等容器中 。几百KB和几MB的控件 , 似乎没有什么大区别 。但要将控件装载到Web浏览器时 , 很可能要通过速度很慢的电话线 。现在 , 控件的大小已经是非常关键的问题 。一旦要执行超过了某个限度以上的控件 , 就会延长下载时间 。因此 , Microsoft规定 :在ActiveX控件中 , 只能执行绝对必要的功能 。Apple和IBM推行的OpenDoc , 曾是ActiveX控件的主要竞争对手 。现在OpenDoc的赞助企业 , 已正式宣告中止资助 。大部分与Microsoft对抗的企业 , 转而支持JavaBeans(基于J ava的组件结构) 。ActiveX控件 , 基本上都是和Windows捆绑在一起、以二进制机器代码发放的 , 而JavaBeans却不同 , 它在哪儿都能执行 。这当然是有代价的 。显而易见 , 只要不牺牲可移植性 , 就不可能完全、彻底地利用本地环境 。要编写从公共Internet上能下载的组件时 , 应优先选择JavaBeans 。桌面组件市场在持续、急速增长 。其中绝大部分是以ActiveX控件构筑的(目前Java Beans仍然是少数) 。但服务器组件的标准化要落后一些 。在桌面上 , Web浏览器、VB以及 PowerBuilder这些编程环境 , 作为容器是强有力的 。但服务器容器又该当如何呢?作为服务器上的组件容器 , 事务处理服务器是一个较好的选择 。Microsoft的竞争对手 , 千方百计要阻止MTS和NT称霸市场 。他们正在快马加鞭地制订服务器上的组件标准 , 其中最有前途的是Enterprise JavaBeans 。它是JavaBeans的扩充  , 并定义了事务处理服务器接口 。Enterprise JavaBeans的支持者们 , 希望独立软件厂商不是将服务器组件作为COM组件来编写 , 而是要作为Beans来编写 。四、ActiveX的构筑工具 随着ActiveX控件的推广 , ActiveX控件的开发工具逐日增加 。由于ActiveX不依赖于语言 , 所以传统的开发工具基本上都能构筑、配备ActiveX控件 。最常用的有Delphi、Po werBuilder以及Visual Basic、Visual C++、Visual J++等 。1. 基本概况 用3GL开发ActiveX控件的方法有:①MFC (Microsoft Foundation Class , Microsoft 基础类) , ②ATL(ActiveX Template Library , ActiveX模板库) , ③BaseCtrl Framework等 。MFC最经典 , 采用MFC , 可以使开发者不去关心接口 , 而是集中精力关注对象的动作 。缺点是控件的规模较大且执行时DLL必须与容器同时存在 。ATL可利用模板生成代码 。就是说  , 库和DLL无需与控件一起推出 。在ATL中 , 需要从作为模板存在的几个基本类派生类 。AT L也有缺点 , 即接口的处理较难 , 应用中必要的接口 , 必须分别制作 。另外 , ATL不支持类向导(Class Wizard) 。遗憾的是 , 没有使对象描述语言(Object Description Language)和接口定义语言文件、与用户代码自动同步的向导 。BaseCtrl是个简便型库 。与ATL非常相似 , 但无模板 。实际上 , 由于BaseCtrl过于简便 , Microsoft并不支持它 。在BaseCtrl中 , 带有几个万能控件(Skeleton Control) 。BaseCtrl提供容易理解的ActiveX开发模型 , 但与 ATL相比并不简单 , 且灵活性也不及ATL 。目前看来 , 对于ActiveX控件开发者来说 , BaseCt rl是个”苦涩”的选择 。2. 开发工具 可制作ActiveX控件的、最初的工具是Microsoft的Visual C++ 。它可为ActiveX开发者提供最多的控件 。Visual J++也可以制作ActiveX控件 。Borland推出的两个工具(JBuilder和IntraBuilder)也非常令人瞩目 。但是 , 用Borl and的工具能制作ActiveX组件的 , 只有Delphi 3.0和C++ Builder 。Borland把Delphi的A ctiveX开发功能 , 叫作Active Inside 。它是将任意的Delphi Window做成ActiveX的形式 。Active Inside备有配备在Web上的新控件 。Delphi可以将控件链接到COM和DCOM 。PowerBuilder 5.0是改造成能用于ActiveX开发的、客户机/服务器开发工具 。Powe rBuilder可以将Data Window(PowerBuilder应用开发的核心部分)作为ActiveX控件来配备 。以使现在的PowerBuilder开发者 , 能使用PowerScript编程语言等某些熟悉的功能 。具有制作ActivX控件最好工具的 , 当属Microsoft 。例如 , 若用Visual Basic 5.0 , 开发者就可使用可视化编程环境和本机的Visual Basic for Application语言 , 来开发控件 。五、ActiveX 的未来的确 , Windows和Windows NT的世界 , 是ActiveX技术的最佳环境 。但无论Micr osoft如何卖力推进它的OS , 也不能使所有的企业都变成清一色的Windows 。因此 , Micros oft要设法使COM、DCOM以及ActiveX家族的一部分 , 也能在其他OS上使用 。现在 , 在Macin tosh中 , 已经支持ActiveX , 其中也包含对ActiveX控件的支持 。Software AG正在把这些技术移植到多个Unix和IBM的OS/390上 。DEC和HP也打算将这些技术在自己的系统上使用 , 他们也是用移植Microsoft代码的办法来实现的 。COM已成为Windows 95和Windows NT环境下基础软件的重要部分 , 但它的未来还有许多不确定的因素 。例如 , Microsoft是否能将COM作为多平台技术 , 让其继续存在发展下去 ?为了使NT服务器能适合已有的企业 , 就必须要使DCOM等分布式服务也能在非Microsoft平台上应用 。要解决这些问题 ,  需花费相当长的一段时间 。另外 ,  基于CORBA的产品和Jav a的RMI , 已成功地运行在多OS环境下 。多平台DCOM出台得越晚 , CORBA和RMI就领先越多 。ActiveX控件和JavaBeans的竞争前景如何?无论使软件运行在Web浏览器上也好 , 还是在另外的地方运行也好 , 总之 , 组件式软件(ComponentWare)将是下一个软件开发的热点 。目前 , ActiveX控件虽然暂居领先 , 但由于OpenDoc的自生自灭 , 与Microsoft竞争的企业会结为一体与之抗衡 。用户决不希望看到”一统天下” , 仅就这点而言 , JavaBeans也会在这一市场竞争中抢占一席之地 。
六、自己写C#的ActiveX怎么进行安全认证啊?仅供参考:解决办法:1、创建一个IObjectSafety , 以便在注册组件的时候向COM接口表明身份 , 让系统认为该组件是合法的 , 组件需要向COM接口提供uuid该ID是一个GuidAttribute类型的唯一识别码 , 此识别码是COM接口中默认的 , 也就是说 , 此值是特定指定的 , 不可改变 , 值是:CB5BDC81-93C1-11CF-8F20-00805F2CD064 , 代码如下:C# code?1234567891011121314151617181920using System;using System.Runtime.InteropServices;[ComImport, GuidAttribute(“CB5BDC81-93C1-11CF-8F20-00805F2CD064”)]//uuid[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]//继承了IUnknownpublic interface IObjectSafety{[PreserveSig]int GetInterfaceSafetyOptions(ref Guid riid,[MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions,[MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);[PreserveSig()]int SetInterfaceSafetyOptions(ref Guid riid,[MarshalAs(UnmanagedType.U4)] int dwOptionSetMask,[MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);}2、在接口类中继承IObjectSafety , 并引用了它的两个接口 , 代码如下: C# code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081[Guid(“53e7d076-3f72-4750-93e4-470c107f60f9”)]public class ActiveXDemo : IObjectSafety{private const string _IID_IDispatch = “{00020400-0000-0000-C000-000000000046}”;private const string _IID_IDispatchEx = “{a6ef9860-c720-11d0-9337-00a0c90dcaa9}”;private const string _IID_IPersistStorage = “{0000010A-0000-0000-C000-000000000046}”;private const string _IID_IPersistStream = “{00000109-0000-0000-C000-000000000046}”;private const string _IID_IPersistPropertyBag = “{37D84F60-42CB-11CE-8135-00AA004BB851}”;private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = https://www.45qun.com/0x00000002;private const int S_OK = 0;private const int E_FAIL = unchecked((int)0x80004005);private const int E_NOINTERFACE = unchecked((int)0x80004002);private bool _fSafeForScripting = true;private bool _fSafeForInitializing = true;public void TestActiveX(){//ActiveX组件测试方法}int IObjectSafety.GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions){int Rslt = E_FAIL;string strGUID = riid.ToString(“B”);pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;switch (strGUID){case _IID_IDispatch:case _IID_IDispatchEx:Rslt = S_OK;pdwEnabledOptions = 0;if (_fSafeForScripting == true)pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;break;case _IID_IPersistStorage:case _IID_IPersistStream:case _IID_IPersistPropertyBag:Rslt = S_OK;pdwEnabledOptions = 0;if (_fSafeForInitializing == true)pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt = E_NOINTERFACE;break;}return Rslt;}int IObjectSafety.SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions){int Rslt = E_FAIL;string strGUID = riid.ToString(“B”);switch (strGUID){case _IID_IDispatch:case _IID_IDispatchEx:if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && (_fSafeForScripting == true))Rslt = S_OK;break;case _IID_IPersistStorage:case _IID_IPersistStream:case _IID_IPersistPropertyBag:if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && (_fSafeForInitializing == true))Rslt = S_OK;break;default:Rslt = E_NOINTERFACE;break;}return Rslt;}}3、总结:上面的代码来自网络 , MSDN中也有说明 , 在网上很多记录中 , GetInterfaceSafetyOptions和SetInterfaceSafetyOptions的代码如下://注意:返回类型是与自己安义的接口对应 , 这段代码仅仅是个例子说明 , 所以和我上面定义的接口类型是不一样的C# code?12345678910public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions){pdwSupportedOptions = 1;pdwEnabledOptions = 2;}public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions){throw new NotImplementedException();}这段代码很多人说可能实现安全认证 , 但是我个人亲测却没有成功 , 原因就不细究了 , 没有测试就转帖的文章太多了PS:使用上述的代码可以避免IE弹出安全确认的对话框(问题描述第2点的图) , 但是还是会提示:“为了有利于保护安全性 , Internet Explorer 已限制此网页运行可以访问计算机的脚本或ActiveX 插件”解决的办法是在IE中进行设置:工具–>Internet选项–>高级–>允许活动内容在我的计算机上的文件运行解决办法:1、创建一个IObjectSafety , 以便在注册组件的时候向COM接口表明身份 , 让系统认为该组件是合法的 , 组件需要向COM接口提供uuid该ID是一个GuidAttribute类型的唯一识别码 , 此识别码是COM接口中默认的 , 也就是说 , 此值是特定指定的 , 不可改变 , 值是:CB5BDC81-93C1-11CF-8F20-00805F2CD064 , 代码如下:C# code?1234567891011121314151617181920using System;using System.Runtime.InteropServices;[ComImport, GuidAttribute(“CB5BDC81-93C1-11CF-8F20-00805F2CD064”)]//uuid[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]//继承了IUnknownpublic interface IObjectSafety{[PreserveSig]int GetInterfaceSafetyOptions(ref Guid riid,[MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions,[MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);[PreserveSig()]int SetInterfaceSafetyOptions(ref Guid riid,[MarshalAs(UnmanagedType.U4)] int dwOptionSetMask,[MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);}2、在接口类中继承IObjectSafety , 并引用了它的两个接口 , 代码如下: C# code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081[Guid(“53e7d076-3f72-4750-93e4-470c107f60f9”)]public class ActiveXDemo : IObjectSafety{private const string _IID_IDispatch = “{00020400-0000-0000-C000-000000000046}”;private const string _IID_IDispatchEx = “{a6ef9860-c720-11d0-9337-00a0c90dcaa9}”;private const string _IID_IPersistStorage = “{0000010A-0000-0000-C000-000000000046}”;private const string _IID_IPersistStream = “{00000109-0000-0000-C000-000000000046}”;private const string _IID_IPersistPropertyBag = “{37D84F60-42CB-11CE-8135-00AA004BB851}”;private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;private const int S_OK = 0;private const int E_FAIL = unchecked((int)0x80004005);private const int E_NOINTERFACE = unchecked((int)0x80004002);private bool _fSafeForScripting = true;private bool _fSafeForInitializing = true;public void TestActiveX(){//ActiveX组件测试方法}int IObjectSafety.GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions){int Rslt = E_FAIL;string strGUID = riid.ToString(“B”);pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;switch (strGUID){case _IID_IDispatch:case _IID_IDispatchEx:Rslt = S_OK;pdwEnabledOptions = 0;if (_fSafeForScripting == true)pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;break;case _IID_IPersistStorage:case _IID_IPersistStream:case _IID_IPersistPropertyBag:Rslt = S_OK;pdwEnabledOptions = 0;if (_fSafeForInitializing == true)pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt = E_NOINTERFACE;break;}return Rslt;}int IObjectSafety.SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions){int Rslt = E_FAIL;string strGUID = riid.ToString(“B”);switch (strGUID){case _IID_IDispatch:case _IID_IDispatchEx:if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && (_fSafeForScripting == true))Rslt = S_OK;break;case _IID_IPersistStorage:case _IID_IPersistStream:case _IID_IPersistPropertyBag:if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && (_fSafeForInitializing == true))Rslt = S_OK;break;default:Rslt = E_NOINTERFACE;break;}return Rslt;}}3、总结:上面的代码来自网络 , MSDN中也有说明 , 在网上很多记录中 , GetInterfaceSafetyOptions和SetInterfaceSafetyOptions的代码如下://注意:返回类型是与自己安义的接口对应 , 这段代码仅仅是个例子说明 , 所以和我上面定义的接口类型是不一样的C# code?12345678910public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions){pdwSupportedOptions = 1;pdwEnabledOptions = 2;}public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions){throw new NotImplementedException();}这段代码很多人说可能实现安全认证 , 但是我个人亲测却没有成功 , 原因就不细究了 , 没有测试就转帖的文章太多了PS:使用上述的代码可以避免IE弹出安全确认的对话框(问题描述第2点的图) , 但是还是会提示:“为了有利于保护安全性 , Internet Explorer 已限制此网页运行可以访问计算机的脚本或ActiveX 插件”解决的办法是在IE中进行设置:工具–>Internet选项–>高级–>允许活动内容在我的计算机上的文件运行

    推荐阅读