公司现在需要开发一个电子秤计量的插件。有一个MSCOMM32.OCX用来监听窜口,我已经用C#写好了。现在是想把它作成ActiveX插件嵌入到网页里面。
遇到的问题是在VS2012里面调试是没有问题的。然后发布到IIS里面,然后用IE打开,插件那里就是一个小红色的叉叉。我发现用VS2012打开的IE,输入网页,是可以打开的。把VS2012关掉以后,单独用IE打开就是上面那个现象。查了资料说是ActiveX安全性受限。试了很多办法也不行。请问各位这个现象怎么处理?或者不用ActiveX这种方法能不能把电子秤计量嵌入到网页里面呢?
谢谢!
遇到的问题是在VS2012里面调试是没有问题的。然后发布到IIS里面,然后用IE打开,插件那里就是一个小红色的叉叉。我发现用VS2012打开的IE,输入网页,是可以打开的。把VS2012关掉以后,单独用IE打开就是上面那个现象。查了资料说是ActiveX安全性受限。试了很多办法也不行。请问各位这个现象怎么处理?或者不用ActiveX这种方法能不能把电子秤计量嵌入到网页里面呢?
谢谢!
解决方案 »
- 如果您正处于进程当中 信息有可能丢失
- 用vs2008 编写windows CE 程序
- 在线求SQL语句 如何得到唯一值
- C#调用扫描器扫描后的输出问题
- 我要继承两个控件,可不支持,咋办?
- 如何实现qq类似窗体.希望您的建议!很急
- 菜鸟求救:请大侠明灯指路(关于MSXML和.net)
- 小弟有一难道请教! ErrorCode -Void CheckError(System.Data.OracleClient.OciErrorHandle, Int32
- 请教:B/SCRM软件用C#采用什么工具比较适合团队开发?是不是用ASP开发更容易呢?
- to acptvc,help me!
- !!C#!!继续求大神拯救...关于dataGridView里显示数据的问题...
- C#如何使图片随机循环 求解
然后给用户个操作文档,让用户设置IE的安全性,允许ActiveX加载
参考
http://blog.csdn.net/chuxue1342/article/details/7336538
http://blog.csdn.net/yeqi3000/article/details/8224355
有一种可行的,把ActiveX做成安装包并在那个ActiveX的控件里加入 下面的代码就可以了,这个我这几天就是把加密狗整合到网站上,让用户登录必需插入加密狗才能登录。[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public 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);
}
你的Active 继承 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 int 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;
} public int 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;
}
D:\Project\XinDaFu\MyActivex\MyElectronicScale.html(可以。但是有个前提,打开之前必须把所有IE都关掉,否则不显示)
http://localhost:8000/MyActivex/MyElectronicScale.html(不行)