elb*_*web 2 .net c# internet-explorer activex code-signing
我有一个COM可见的.NET DLL文件,在Internet Explorer中显示的网页中用作ActiveX控件.
当通过网页上的JavaScript代码调用时,控件本身可以正常工作(虽然有一些注意事项).
问题在于签署DLL并使其可靠地访问.我(据我所知)在Visual Studio中签署项目.在项目的"签名"属性中,我创建了一个.pfx文件,并使用它来签署DLL.
在Internet Explorer中,无论我做什么,我都无法让Internet Explorer在没有手动进入安全设置的情况下加载ActiveX控件并更改"下载未签名的ActiveX控件"和"初始化和脚本ActiveX控件不标记为脚本安全" '启用/提示选项.
似乎原始问题与文件的签名无关,而是在IObjectSafety的实现中.为了允许IE加载,我需要正确实现该接口,并且它工作正常(即使没有有效的签名).
简单的例子:
[ComImport()]
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IObjectSafety
{
[PreserveSig()]
int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions);
[PreserveSig()]
int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions);
}
Run Code Online (Sandbox Code Playgroud)
班级本身:
[ProgId("Testing.Test")]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
public sealed class Test : IObjectSafety
{
#region Saftey Interface
private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
private const int S_OK = 0;
[ComVisible(true)]
public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
return S_OK;
}
[ComVisible(true)]
public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
{
return S_OK;
}
#endregion
[ComVisible(true)]
public string TestString
{
get
{
return 'A Test';
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5060 次 |
| 最近记录: |