Работа с плагинами

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Здравствуйте уважаемые форумчане и администрация!

Подскажите пожалуйста:
1) как запретить использование плагинов?
"GV::$inst->UsePlugins(false);" вызывает ошибку -> "Call to undefined method: ZennoLab\CommandCenter\Instance::UsePlugins()"
Какому класу пренадлежит метод/свойство UsePlugins?
2) Что делает HidePlugin метод? Прячет плагин извне, но изнутри он останется работать?
3) Как устанавливать плагины? Они же расширения, правильно я понимаю?
https://help.zennolab.com/en/v5/zennoposter/5.11.0.0/webframe.html#topic351.html -- а тут пишет "filename Plugin dll file name", какой такой ".dll"? Откуда его брать. Гугл не помог, видимо либо я не понимаю куда рыть либо под словом плагин имеется ввиду что-то другое.

Заранее благодарен за помощь и просветление!
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 242
Благодарностей
5 848
Баллы
113
UsePlaugins отключается используемые плагины в ZP - их всего 3 - Javascript, Flash и Microsoft Silverlight.
Другие сторонние плагины не устанавливаются в ZennoPoster. Из можно только эмулировать.
Используйте конструктор плагинов для их создания и эмуляции, и методы Show/Hide для их включения/выключения.
Схема работы примерно такая.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Смотрите, делаю вот так:

PHP:
$plugins = GV::$inst->GetPlugins();  //  Достаю колекцию всех плагинов
        $c = count($plugins);
        NewClass::SendInfoToLog($c);  //  Выдает что кол-во плагинов 1
        for ($i = 0; $i < $c; $i++) {
            NewClass::SendInfoToLog($plugins[$i]->Name);  //  Не считывает значение, пишет о внутренней ошибке
            //GV::$inst->HidePlugin($plugins[$i]);
        }
В то же время Хуер выдает целую стопку установленых плагинов:

Код:
Adobe Acrobat
     nppdf32.dll
Google Update
     npGoogleUpdate3.dll
Java Deployment Toolkit 8.0.1010.13
     npdeployJava1.dll
Java(TM) Platform SE 8 U101
     npjp2.dll
Unity Player
    npUnity3D32.dll
VLC Web Plugin
    npvlc.dll
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 242
Благодарностей
5 848
Баллы
113
Что именно GetPlugins() выдает?
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Что именно GetPlugins() выдает?
NewClass::SendInfoToLog($c); -- выдает цыферку 1
NewClass::SendInfoToLog($plugins[$i]->Name); -- Пишет "Fault Exception не обработано" -> "Серверу не удалось обработать запрос из-за внутренней ошибки. Для получения дополнительной информации об ошибке включите IncludeExceptionDetailInFaults (или с помощью атрибута ServiceBehaviorAttribute, или из конфигурации поведения <serviceDebug>) на сервере с целью отправки информации об исключении клиенту, либо включите трассировку, согласно документации Microsoft .NET Framework 3.0 SDK, и изучите журналы трассировки сервера."
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Вот так пробовал - все нормально
PHP:
$plugin = new ZennoLab\CommandCenter\PluginItem("Plugin name", "PluginFile.dll", "It is description of plugin", "15.0.0.3");
        GV::$inst->ShowPlugin($plugin);  // показывает плагин
        GV::$inst->HidePlugin($plugin);  //  скрывает плагин
        NewClass::SendInfoToLog($plugin->Name);  //  Шлет в лог Plugin name
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 242
Благодарностей
5 848
Баллы
113
NewClass::SendInfoToLog($c); -- выдает цыферку 1
NewClass::SendInfoToLog($plugins[$i]->Name); -- Пишет "Fault Exception не обработано" -> "Серверу не удалось обработать запрос из-за внутренней ошибки. Для получения дополнительной информации об ошибке включите IncludeExceptionDetailInFaults (или с помощью атрибута ServiceBehaviorAttribute, или из конфигурации поведения <serviceDebug>) на сервере с целью отправки информации об исключении клиенту, либо включите трассировку, согласно документации Microsoft .NET Framework 3.0 SDK, и изучите журналы трассировки сервера."
Не понимаю, что делаете - NewClass::SendInfroToLog
Должно быть $project>SendInfoToLog();
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
В моем классе иногда логирование еще мне на локальный сервер в БД лог пишет, поэтому и создал отдельно свой метод. А по сути в контексте данной проблемы это одно и то же ($project>SendInfoToLog(); = NewClass::SendInfroToLog)
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 242
Благодарностей
5 848
Баллы
113
В моем классе иногда логирование еще мне на локальный сервер в БД лог пишет, поэтому и создал отдельно свой метод. А по сути в контексте данной проблемы это одно и то же ($project>SendInfoToLog(); = NewClass::SendInfroToLog)
Так может внутренние ошибки и возникают из-за того что вы сами что-то прописали в логировании?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 242
Благодарностей
5 848
Баллы
113
Смотрите, делаю вот так:

PHP:
$plugins = GV::$inst->GetPlugins();  //  Достаю колекцию всех плагинов
        $c = count($plugins);
        NewClass::SendInfoToLog($c);  //  Выдает что кол-во плагинов 1
        for ($i = 0; $i < $c; $i++) {
            NewClass::SendInfoToLog($plugins[$i]->Name);  //  Не считывает значение, пишет о внутренней ошибке
            //GV::$inst->HidePlugin($plugins[$i]);
        }
В то же время Хуер выдает целую стопку установленых плагинов:

Код:
Adobe Acrobat
     nppdf32.dll
Google Update
     npGoogleUpdate3.dll
Java Deployment Toolkit 8.0.1010.13
     npdeployJava1.dll
Java(TM) Platform SE 8 U101
     npjp2.dll
Unity Player
    npUnity3D32.dll
VLC Web Plugin
    npvlc.dll
Whoer выдает ещё системные плагины. Попробуйте спрятать их через Hide.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
системные плагины
А как системные плагины спрятать? Я думал через GetPlugins() это делается, подскажите пожалуйста тогда.

Так может внутренние ошибки и возникают из-за того что вы сами что-то прописали в логировании?

тогда и этот код бы в логирование выдавал ошибку, не так ли?

Вот так пробовал - все нормально
PHP:
$plugin = new ZennoLab\CommandCenter\PluginItem("Plugin name", "PluginFile.dll", "It is description of plugin", "15.0.0.3");
        GV::$inst->ShowPlugin($plugin);  // показывает плагин
        GV::$inst->HidePlugin($plugin);  //  скрывает плагин
        NewClass::SendInfoToLog($plugin->Name);  //  Шлет в лог Plugin name
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 242
Благодарностей
5 848
Баллы
113
А как системные плагины спрятать? Я думал через GetPlugins() это делается, подскажите пожалуйста тогда.
тогда и этот код бы в логирование выдавал ошибку, не так ли?
Метод HidePlugin прячет плагины. Попробуйте его использовать. Посмотрите что whoer показывает и пропишите этот плагин в методе.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Метод HidePlugin прячет плагины. Попробуйте его использовать. Посмотрите что whoer показывает и пропишите этот плагин в методе.
Выход разве что вот так делать: GV::$inst->UsePlugins = false;

Но после этого вот такой код не будет уже работать:
PHP:
$plugin = new ZennoLab\CommandCenter\PluginItem("Google Update", "npGoogleUpdate3.dll", "It is description of plugin", "15.0.0.3");
        GV::$inst->ShowPlugin($plugin);
То есть созданные плагины также не будут добавляться.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Метод HidePlugin прячет плагины. Попробуйте его использовать. Посмотрите что whoer показывает и пропишите этот плагин в методе.
Попробовал добавить сначала свой плагин, а потом вызвать метод "GetPlugins()" результат все тот же. "NewClass::SendInfoToLog($c);" выдает единичку (количество плагинов), а "NewClass::SendInfoToLog($plugins[$i]->Name);" ошибку.
PHP:
$plugin = new ZennoLab\CommandCenter\PluginItem("Plugin name", "PluginFile.dll", "It is description of plugin", "15.0.0.3");
        GV::$inst->ShowPlugin($plugin);
        $plugins = GV::$inst->GetPlugins();
        $c = count($plugins);
        NewClass::SendInfoToLog($c);
        for ($i = 0; $i < $c; $i++) {
            NewClass::SendInfoToLog($plugins[$i]->Name);
           
        }
На Хуере же новосозданый плагин отображается. Что-то не так с методом "GetPlugins()" или я где-то туплю жестко (со мной в принципе бывает, причем я каждый раз думаю что все у меня хорошо).

Пробовал также "NewClass::SendInfoToLog($plugins[0][$i]->Name);" - ситуация идентична. А вот "NewClass::SendInfoToLog($plugins);" выдает ошибку "No accessible overload of method 'ZennoLab\CodeRunner\ProjectProxy\ProjectProxy::SendInfoToLog' is compatible with the specified arguments", при чем здесь 'ZennoLab\CodeRunner\ProjectProxy\ProjectProxy' не совсем понятно, может вам это о чем-то скажет.

В общем по возможности проверьте у себя работу метода "GetPlugins()" пожалуйста.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
UPD
Код:
// Получаем список плагинов
var PluginList = instance.GetPlugins().ToList();
// По очерёдно в цикле скрываем все плагины
for (int i=0; i < PluginList.Count; i++){
   instance.HidePlugin(PluginList[i]);
}
Стырял код отсюда http://zennolab.com/discussion/threads/anonimnost-v-kazhdyj-zennoposter-ot-useragenta-do-shriftov-chast-1.37703/

А как вызвать метод ".ToList();" на ПХП? "->ToList();" - так не работает.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)