1

我正在尝试在 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当我单击按钮时,此代码仍会触发...

我在这里错过了什么吗?

4

1 回答 1

2

IE 是沙盒的,您正在尝试执行您无法执行的操作,即从网站直接调用 user32。想象一下,如果任何人都可以在任何网站上这样做,那么互联网会有多危险。你的核心架构有缺陷。

于 2010-08-31T11:46:23.523 回答