我正在尝试在 html 页面内的 C# 中托管 Windows 窗体控件,然后在 IIS 中托管该网页,以便其他客户端计算机可以访问。SecurityPermissionException
问题是:用户控件使用了一些非托管代码,当使用另一台机器访问时触发。
为了查明错误,我设法将我的代码简化为一个基本示例,但我似乎无法找到答案。
这是我的用户控件:
// 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
当我单击按钮时,此代码仍会触发...
我在这里错过了什么吗?