1

HTML ページ内の C# で Windows フォーム コントロールをホストし、その Web ページを 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 はサンドボックス化されており、実行できない操作を実行しようとしています。つまり、Web サイトから直接 user32 を呼び出しています。誰かがどのウェブサイトでもそれを行うことができたら、インターネットがどれほど危険になるか想像してみてください. コア アーキテクチャに欠陥があります。

于 2010-08-31T11:46:23.523 に答える