четверг, 14 ноября 2013 г.

О загрузке плагинов в AutoCAD

Данную заметку решил создать для того, чтобы давать не неё ссылку пользователям, когда у них вдруг возникнут проблемы с загрузкой в AutoCAD плагинов, написанных на AutoLISP, Visual LISP, VBA, C++ или .NET, поскольку процесс загрузки в последних версиях AutoCAD стал не только более безопасным, но и менее прозрачным для рядового обывателя.


Если вы хотите разобраться в последовательности автоматической загрузки плагинов в AutoCAD и как этим управлять, то читайте это. Указанная в ссылке статья, к сожалению, не охватывает тему в полном объёме, поскольку в ней отсутствует информация о регистрации автозагрузки посредством записей в ветки HKLM и HKCU реестра, однако основной объём информации по теме автозагрузки в ней присутствует. 

Посредством Startup Suite вы можете добавить в автозагрузку плагины любого типа, кроме .NET. Чтобы воспользоваться Startup Suite, следует запустить команду _.APPLOAD и в открывшемся диалоговом окошке щёлкнуть по кнопке, над которой нарисован "чемоданчик". Откроется диалоговое окно Startup Suite, в котором можно добавлять или удалять в автозагрузку плагины.

Если совместно с плагином поставляется текстовый файл описания его установки (обычно это readme.txt), то внимательно прочитайте его - возможно для работы данного софта потребуется добавить очередную запись в группу Support Search File Path  на вкладке Files диалогового окна Options. Хотя если разработчик софта изначально думал головой, а не пятой точкой, то таких изменений не понадобится.

Автоматическую загрузку плагинов, написанных на .NET выполняют, как правило либо путём их регистрации в реестре, либо загрузкой из LISP кода. К сожалению, добавить их в автозагрузку посредством Startup Suite не получится. 

Начиная с версии AutoCAD 2013 появился новый, более удобный способ управления автозагрузкой плагинов - это менеджер BUNDLE пакетов. Это отдельная тема, которая интересна в основном программистам. К сожалению, компания Autodesk уже не первый год "жуёт носки" и никак не может окончательно определиться с форматом BUNDLE пакетов, время от времени меняя его как перчатки. В виду этого я не вижу особого смысла заморачиваться с использованием данного механизма до тех пор, пока Autodesk окончательно не родит стандарт оформления BUNDLE пакетов.

Если используется AutoCAD 2013 SP1 или более новая версия, то обязательно следует ознакомиться с этой информацией. Настоятельно рекомендуется в настройках профиля AutoCAD прописать пути к доверенным каталогам, дабы для каждого загружаемого плагина не нажимать на кнопку, подтверждающую ваше желание загрузить приложение:


Никогда не размещайте .NET плагины в сети и не пытайтесь загружать их оттуда. Дело в том, что по умолчанию платформа .NET Framework из соображений безопасности блокирует выполнение .NET кода, находящегося в сети. Вы можете дать разрешение на такую загрузку, если имеете права администратора, однако я настоятельно не советую так делать. На своей практике я неоднократно сталкивался с тем, что время от времени на том или ином компьютере разрешения, данные обозначенным выше способом, вдруг переставали работать, по непонятным причинам. Попытки задания повторного разрешения того же уровня результатов не давало. Приходилось давать разрешения другого уровня. 

Кроме того, если .NET плагины находятся на сервере и используются совместно многими пользователями, то администратор CAD не сможет в случае необходимости быстро обновить их, пока хотя бы один пользователь использует их в сеансе своей работы в AutoCAD. Помимо этого, начиная с версии .NET Framework 4.0, компания Microsoft изменила механизм безопасности в .NET и вместо caspol.exe нужно прибегать к др. средствам (подробности легко находятся поиском в Google). 

Предыдущие два абзаца дают понять, что .NET приложения должны размещаться на локальных дисках вашего компьютера, для того, чтобы вы могли успешно пользоваться этим софтом. Однако достаточно ли этого для успешного запуска? Не совсем... Дело в том, что  .NET файлы DLL и EXE могут быть заблокированными. Эту блокировку принудительно устанавливают различные программы, посредством которых происходит передача указанных файлов по сети. Например, нередко таким поведением "страдают" браузеры, почтовые клиенты, а так же Skype. Получив по сети исполняемый файл или библиотеку, написанные на .NET, обязательно проверьте их на предмет блокировки. Если файлы заблокированы - разблокируйте их.

Информацию о том, как можно управлять автозагрузкой .NET плагинов посредством либо регистрации в реестре, либо загрузкой из LISP файлов, или посредством создания своего загрузчика плагинов можно почитать здесь.

Если вы пишете свой управляемый плагин и хотите, чтобы при его автоматической загрузке (при старте AutoCAD) происходили некоторые изменения в панелях Ribbon, то код выполнения этих изменений следует регистрировать на событие Application.Idle. По выполнению кода, не забудьте отписаться от обозначенного события.

4 комментария:

Анонимный комментирует...

Здравствуйте, Алексей! Имеются отрезки (сети газопровода) их нужно переделать в блоки с атрибутами. Можно это автоматизировать? Сколько это стоит? Есть ещё элементы на чертеже которые, я думаю, можно автоматизировать. Но отрезки в первую очередь. Спасибо. Жду вашего ответа. gordeevyzel@googlemail.com

Andrey Bushman комментирует...

Я не Алексей.

Автоматизировать наверняка можно, при наличии грамотно составленного технического задания. Только я за это браться не буду в виду отсутствия свободного времени (очень плотный график сейчас).

Как вариант, можете попробовать разместить объявление на форуме http://forum.dwg.ru/forumdisplay.php?f=33

Заодно просмотрите эту ветку http://forum.dwg.ru/forumdisplay.php?f=29
возможно, что нечто подобное уже решалось.

Анонимный комментирует...

Привет, нужен твой совет. Я написал плагин для 2010 автокада на C#. На моем компьютере он отлично работает, а вот на других нет. Вызываю команду NETLOAD указываю DLL и ничего не происходит. Что делать?В Чем проблема? Спасибо!

Andrey Bushman комментирует...

Привет. Я не телепат. В данной статье обозначены возможные причины проблем. Убедись, что ты следуешь обозначенным условиям. Кроме того, удостоверься, что на целевых машинах присутствует та версия .NET Framework, которую использует твой плагин.