|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Автоматическая загрузка dll-файла посредством Acaddoc.lsp
C, C++, C#
С-Пб.
Регистрация: 07.10.2009
Сообщений: 2,762
|
||
Просмотров: 13340
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
.NET-сборки из ком.строки не загружаются. На caduser.ru А.Ривилис показывал ссылки на ветки реестра, куда надо данные о сборках записывать. По-моему, аналогичное было и в DevTV, но сейчас не проверить
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Кроме того, не понял тогда офиц. инфы. смысл тогда делать вариант команды netload строчный, если он не работает? Если я каждому юзеру пришлю эту информацию: Создаём reg-файл, который произведет в реестре нужные изменения, решив вопрос со своевременным подключением библиотеки: Текст нашего reg-файла: Для русской версии AutoCAD 2009: Цитата:
Цитата:
"[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7004:409\Applications\Bushman]" - здесь мы добавляем новую группу - "Bushman", в которой будут размещаться наши записи. Добавление группы обязательно! Она может иметь др. имя, но она должна быть! Внимание! Код писался и тестировался под 2009-ю версию AutoCAD. Если у вас другая версия программы, то вместо "\R17.2\ACAD-7001:409\" (или вместо "\R17.2\ACAD-7004:409\", если у вас русская версия AutoCAD) у вас будет другое содержимое. Откройте редактор реестра (комманда regedit из командной строки Windows) и пройдите по выше указанной ветви, дабы увидеть именно ваши значения. Внесите в reg-файл данное изменение. Если вы внесли изменение, но ничего не заработало - значит наверняка вы ошиблись при подправлении reg-файла. Убедиться в этом можно так: Если в командной строке AutoCAD вызвать команду "NETLOAD", и в появившемся диалоговом окне выбрать файл AcadLayoutsCount.dll - произойдет загрузка библиотеки. Теперь произведите любую операцию с листами, которая должна повлиять на счетчик листов. Если вы видите, что всё работает (о чём будет выводиться текстовая информация в командной строке AutoCAD) - значит вы напортачили при правке reg-файла. Будьте внимательней - исправьте свою ошибку. "LOADCTRLS"=dword:00000002 - данный параметр указывает, что dll-файл необходимо загружать при открытии приложения. Значение "2" указывает на необходимость. "MANAGED"=dword:00000001 - данный параметр указывает, что dll-файл является управляемым кодом. "LOADER"="C:\\AcadPlagins\\AcadLayoutsCount.dll" - Данный параметр указывает полный путь к файлу нашей библиотеки (если вы сохраняете библиотеку в др. каталоге - измените эту строчку кода, указав ваш путь). Таким образом всё, что от нас требуется - это разместить на диске "C:" каталог "AcadPlagins", в который закинуть файлы нашей сборки. После этого запустить на исполнение наш reg-файл. Всё, задача решена. Теперь можно открывать AutoCAD и работать. они её скорее даже читать не будут, а если и будут - править реестр не смогут, т.к. в политике стоит запрет на использование regedit (админ доступ не даст - наотрез отказался)... Потому хотелось бы через acaddoc.lsp Последний раз редактировалось hwd, 27.10.2009 в 12:23. |
||||
![]() |
|
||||
У меня загружается:
Код:
Цитата:
А вот по сети так (IMHO) не получится так грузить сборку по двум причинам: 1. Нельзя первые "\\\\" менять на "//" 2. Нужны соответствующие права для выполнения .NET-сборки по сети: http://kpblc.blogspot.com/2009/09/net.html |
||||
![]() |
|
||||
Цитата:
спасибо, учту, хотя, честно говоря удивился такому ограничению... Цитата:
|
||||
![]() |
|
||||
Подумай над написанием своего простенького инсталлятора, который находит установленные AutoCAD'ы и по выбору пользователя (из выпадающего списка) прописывает твою .NET-сборку в автозагрузку. В принципе это можно сделать и из самой сборки. Тогда один раз необходимо ее будет загрузить вручную, а она все что надо пропишет в реестр.
|
||||
![]() |
|
||||||
Цитата:
Изменил файл Acaddoc.lsp так: Цитата:
Цитата:
п.с. пытался и так: Цитата:
Цитата:
Последний раз редактировалось hwd, 27.10.2009 в 12:56. |
||||||
![]() |
|
||||
|
||||
![]() |
|
||||
Цитата:
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
А почему в пути слеши не на сетевой каталог указывают?
Уже подправлено, неактуально. P.S. лично я стараюсь не смешивать в лиспе прямые и обратные слеши. Не всегда работает корректно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Если ты вводишь в командной строке:
Код:
Резюме. Можешь еще долго с этим парится, но нормальное решение, это копировать сборку на локальный PC и там ее регистрировать в автозапуске (реестре). |
||||
![]() |
|
||||
я уже не знаю как в каком случае для автокада слэши указывать )
ранее думал, что слешь для автокада, это "/" или же "\\" что для этой программы одно и то же. теперь оказывается, что если я указываю сервер, то "//" ставить нельзя... нужно "\\\\"... где там чего напутано? |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Я ж написал, что "исправлено, теперь неактуально" ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Цитата:
2 Кулик Алексей aka kpblc >Я ж написал, что "исправлено, теперь неактуально" )) не понял тебя... поясни млин... оказывается ещё и CasPol.exe не добавила права на вызов библиотеки, лежащей на серваке... Последний раз редактировалось hwd, 27.10.2009 в 13:15. |
||||
![]() |
|
||||
Цитата:
У них есть права на запись в HKEY_CURRENT_USER (в частности HKEY_CURRENT_USER\Software\Autodesk\AutoCAD - иначе бы AutoCAD не запускался). Тебе нужно писать сюда: HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7001:XXX\Applications для AutoCAD 2009 |
||||
![]() |
|
||||
Значит так...
Изначально (вчера) я разместил библиотеку на локальной машине, добавил в реестр соответствующие изменения - всё заработало как нужно. Но это у меня на машине. Я пошёл к начальнику IT отдела и предложил закинуть библиотеку в сетевой каталог, доступный всем, чтобы пользователи каждый раз при открытии документа подгружали эту библиотеку (т.е. на их компах локальной копии нет) - так проще обновлять библиотеки (заменил на серваке - изменилось у всех). Закинули мы библиотеки на сервак. после этого (уже сегодня) я грохнул у себя в реестре запись по автозагрузке моей библиотеки для каждого документа, решив всё реализовать посредством acaddoc.lsp файла, который закинул в тот же каталог на сервере, где лежит библиотека. с сервера сборку загрузить так и не могу даже вручную... касательно правки реестра - админ сказал, что у всех пользователей нет прав на изменения даже их собственной ветки реестра и regedit запрещён политикой, и что либо менять он не будет, мол как хочешь, так и извращайся, но в реестр не пущу. Единственно - мне дал права на доступ к реестру моего компа, но др. юзерам не даст... Прочёл статью на аглицком, приведенную Александром.... подправил строку шары: Цитата:
файл acaddoc.lsp вроде как автоматом сам загружается, хотя сообщения "\nПроверка связи..." я не получаю на экране, следовательно не происходит автоматической загрузки метода S::STARTUP если вручную вызываю команду AcadLayoutsCountLoad - она запускается. Последний раз редактировалось hwd, 27.10.2009 в 13:46. |
||||
![]() |
|
||||
Цитата:
2. если у них нет прав писать в собственную ветку реестра - AutoCAD не будет работать по определению. Ну пишет он в свою ветку постоянно. Значит все-таки права есть, т.к. AutoCAD работает. Так вот напиши и проверь у кого-нибудь "бесправного". |
||||
![]() |
|
|||||
Цитата:
Если подправить лисп-файл так: Цитата:
Но почему не происходит автоматического выполнения команды AcadLayoutsCountLoad при таком варианте? : Цитата:
Похоже я понял в чём дело... По видимому имеет значение порядок записи (определений) функций. Так всё работает: Цитата:
Последний раз редактировалось hwd, 27.10.2009 в 14:06. |
|||||
![]() |
|
||||
Регистрация: 19.10.2014
Сообщений: 21
|
А можете на пальцах пояснить порядок действий, чтобы подключить счетчик листов в акад?
Версия - акад2017. Пробовал подключить таким образом скачал папку с библиотекой, создал файл AcadLayoutsCountLoad.lsp на рабочем столе, ставлю этот файл в автозагрузку. Счетчик не работает. |
|||
![]() |
|
||||
Регистрация: 19.10.2014
Сообщений: 21
|
Boxa, отсюда скачал библиотеку для создания счетчика листов в файле https://sites.google.com/site/bushma...ov-v-dwg-fajle.
Здесь как раз обсуждалось, как с помощью лиспа подключить ее в автокад. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
AID88, а Вас не смутила дата публикации этой библиотеки? Все таки октябрь 2011 года, это довольно давно.
Да и библиотека собрана под .NET 3.5 и автокад 2009, а Вы ее пытаетесь запустить на .NET 4.6 и акад 2017. В общем в том виде в котором библиотека сейчас, она работать не будет, нужно пересобирать. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
попробуйте обратиться к автору, может он Вам поможет, он часто тут бывает.
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Рискую немного зайти в оффтоп, но раз уж я знаю ответ на вопрос, в который перетекла эта тема, то отпишусь. Набросал наскоро решение на лиспе, которое вроде бы (если все правильно понял), выполняет ту же функцию. Должно работать на любой версии Автокада, но мне удалось потестировать только на 2011-й и 2015-й.
В общем, вот код: Код:
Теперь о том, как работает код. Он создает реактор на событие изменения семейства ЛИСТОВ. При добавлении или удалении листа (а также при открытии чертежа, если добавлен в автозагузку) он срабатывает (реагирует) и назначает указанной системной переменной значение актуального количества листов, эту переменную и подхватывает созданное поле. После обновления привычным способом поле содержит в себе цифру, соответствующую количеству листов в файле. Правда, как в коде по ссылке, не обрабатываются листы-черновики (имя которых начинается с "_"), но это несложно добавить, если понадобится. Последний раз редактировалось skkkk, 18.03.2017 в 03:16. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Только постоянным его не делай: http://adn-cis.org/use-persisten-reactors.html
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Кулик Алексей aka kpblc, спасибо за важное замечание и полезную статью.
Правильно ли я понимаю, что создав этот реактор (запустив код выше), проверив его на постоянность Код:
То есть, постоянным его надо именно сделать, а по умолчанию он живет, пока открыт файл? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Я бы принудительно их делал непостоянными:
Цитата:
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными | Андрей Х. | AutoCAD | 24 | 27.05.2015 10:17 |
Загрузка DWG файла из БД MS Access? | Trifon | Программирование | 6 | 10.02.2011 08:49 |
СПДС, Автоматическая загрузка при открытии файла | Vildar | Прочее. Программное обеспечение | 11 | 05.09.2008 16:58 |
Выполнение acaddoc.lsp - частичное отображение опций команды Автокада | Makswell | LISP | 18 | 26.03.2008 18:35 |