Как программно реализовать IObjectSafety в JScript.NET - PullRequest
3 голосов
/ 24 декабря 2011

tldr;Как пометить dll JScript.NET как безопасный для сценариев?

Рассмотрим эту библиотеку JScript.NET (helloworld1.js):

package helloworld1{
  class test1 {
    public function test1run(){
      return 'This is a string returned from helloworld1.dll';
    }
  }
}

После запуска через

jsc.exe /nologo /t:library helloworld1.js

и

regasm /nologo /codebase helloworld1.dll

Я могу использовать его на своей локальной html-странице с:

var helloworld1 = new ActiveXObject("helloworld1.test1");
alert(helloworld1.test1run());

Все отлично работает, и я получаюпредупреждение с This is a string returned from helloworld1.dll.

Теперь ... Я хочу избавиться от страшного предупреждения безопасности IE, которое появляется каждый раз при создании экземпляра объекта ActiveX :

An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?

Я знаю, что способ удалить предупреждение безопасности - пометить dll как safe for scripting и внедрить IObjectSafety.

Я знаю, как это сделать в VB6 и VB.NET, но как мне реализовать его в JScript.NET?

Любая помощь действительно приветствуется.

1 Ответ

1 голос
/ 29 декабря 2011

После обширного исследования я понял, что в JScript.NET нет абсолютно никакой документации по IObjectSafety, я не могу реализовать этот интерфейс непосредственно в коде.

Я наконец-то остановился на добавлении необходимых ключей реестра, чтобы пометить мои dll как «Безопасные для инициализации» и «Безопасные для сценариев»:

[HKEY_CLASSES_ROOT\CLSID\[MY_COM_CLASS_GUID]\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
[HKEY_CLASSES_ROOT\CLSID\[MY_COM_CLASS_GUID]\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]

Я добавляю эти ключи во время процедуры установки, когда helloworld1.dll развертывается на целевых машинах. Работает без нареканий.

...