Как предоставить доступ неуправляемого кода для форм Windows, размещенных в HTML? - PullRequest
1 голос
/ 31 августа 2010

Я пытаюсь разместить элемент управления Windows Forms в C # внутри html-страницы, а затем разместить эту веб-страницу в 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 Configuration Tool для предоставления доступа к неуправляемому коду и создал CodeGroup, указывающий на сильный ключ, используемый для именования сборки.Я также создал MSI для копирования этих настроек на другие машины (я делал это как на уровне предприятия, так и на уровне машины).

Несмотря на все это, этот код по-прежнему вызывает SecurityPermissionException, когда янажмите кнопку ...

Я что-то здесь упускаю?

1 Ответ

2 голосов
/ 31 августа 2010

IE находится в изолированной программной среде, и вы пытаетесь выполнить операцию, которую вы не можете выполнить, т. Е. Вызываете непосредственно user32 с веб-сайта. Представьте, насколько опасным был бы Интернет, если бы кто-нибудь мог сделать это на любом веб-сайте. Ваша основная архитектура имеет недостатки.

...