1
我想在C#中托管一个Windows窗体控件在HTML页面内,然后在IIS中托管该网页以便其他客户机可访问。 问题是:用户控件使用一些非托管代码,当使用另一台机器访问时触发SecurityPermissionException
。如何授予托管在HTML中的窗体窗体的非托管代码访问?
我已经设法将我的代码贬低为一个基本的例子,以查明错误,我似乎无法找到答案。
这里是我的用户控件:
// To handle strong named assembly
[assembly: AllowPartiallyTrustedCallers]
namespace WinFormsHTMLControl
{
[SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode = true)] // to allow assertions regarding unmanaged code permissions
public partial class HelloWorldControl : UserControl
{
#region Methods/Consts for Embedding a Window
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
#endregion
public HelloWorldControl()
{
InitializeComponent();
}
private void btnClick_Click(object sender, EventArgs e)
{
new SecurityPermission(PermissionState.Unrestricted).Assert();
IntPtr picBoxHandle = FindWindow("IEFrame", "Internet Explorer");
lblMessage.Text = picBoxHandle.ToString();
SecurityPermission.RevertAssert();
}
}
}
我已经签署了一个关键的组件,我创建了一个权限集在.NET配置工具,以授予接取非托管代码,并创建了一个CodeGroup
指向用于命名组件的强键。 我也创建了一个MSI为了将这些设置复制到其他机器(我在企业和机器级别都做了这个)。
尽管如此,这段代码还在这里触发SecurityPermissionException
当我按一下按钮......
我缺少的东西?
我明白你在说什么,但这是以前做过的事情,也是使用在网站上托管的Windows窗体的动机之一:做一些无法仅使用网页完成的事情。 关于安全问题,这正是为什么要让这个工作很困难,因为你说了什么。然而,它可以完成,而不是一个有缺陷的架构,它只取决于你正在使用的环境。总结,我知道它可以完成,我只是不能复制它。尽管如此,谢谢你的回答。 – 2010-08-31 13:21:16