Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: JohnLennin от 14-01-2016, 11:51:59

Название: Инсталлятор для новичков
Отправлено: JohnLennin от 14-01-2016, 11:51:59
Приветствую "коллег по цеху". Жизнь никогда не стоит на месте и развивается по спирали, вот пришлось заново вернуться к программированию.
Написал в свое время dll - все работает. Но чтобы установить ее каждый раз на новом месте необходимо выполнять инструкции по установке dll через реестр, и вписывать команды в ленту в адаптации.  Назрела потребность сделать инсталлятор, чтобы пользователь мог просто запустить setup и dll сама зарегистрируется в реестре и пропишутся необходимые команды в ленте со значками.
Суть вопроса - где почитать и что посмотреть на примерах по созданию инсталляторов для модулей .net под AutoCAD? В частности как создавать файлы cuix и ресурсы меню для AutoCad, ну и как инсталлятором прописать пути к доверенным каталогам?
Что посоветуете?
Название: Re: Инсталлятор для новичков
Отправлено: Александр Пекшев aka Modis от 14-01-2016, 11:54:11
http://adndevblog.typepad.com/autocad/2013/01/autodesk-autoloader-white-paper.html
Название: Re: Инсталлятор для новичков
Отправлено: Александр Пекшев aka Modis от 14-01-2016, 11:59:29
Хотя вот я лично делал все сам - прописывание в реестр, создание ленты и т.п. Чтобы самому, так сказать, все прочувствовать )) В итоге достаточно один раз выполнить процедуру загрузки dll через NETLOAD - она сама все дальше сделает
Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 14-01-2016, 12:00:02
Указанную Александром ссылку не рекомендую в виду того, что изложенная по этой ссылке информация на сегодняшний день, отчасти, не соответствует действительности. Более актуальный [надёжный] вариант информации о Bundle-пакетах и о структуре файла PackageContents.xml лучше смотреть в английском варианте справки AutoCAD. Локализованный вариант справки по обозначенной теме весьма кривой (содержит огромное количество ошибок).
Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 14-01-2016, 12:05:59
Назрела потребность сделать инсталлятор, чтобы пользователь мог просто запустить setup и dll сама зарегистрируется в реестре и пропишутся необходимые команды в ленте со значками.
Суть вопроса - где почитать и что посмотреть на примерах по созданию инсталляторов для модулей .net под AutoCAD? В частности как создавать файлы cuix и ресурсы меню для AutoCad, ну и как инсталлятором прописать пути к доверенным каталогам?
Что посоветуете?
Можешь писать свой инсталлятор, например MSI. В составе пакета можно определить набор изменений, которые должны вноситься в реестр при установке.  Информация о создании Partial CUI\CUIX присутствует в справке AutoCAD. Создавать эти файлы программно не вижу смысла - гораздо проще и быстрее создать их один раз вручную средствами GUI, представленными в AutoCAD и результат включить в состав MSI. Создавать MSI-пакеты можно с помощью Wix (http://wixtoolset.org/).
Название: Re: Инсталлятор для новичков
Отправлено: JohnLennin от 14-01-2016, 12:16:31
Александр Пекшев aka Modis и Андрей Бушман, благодарю за ответы и советы.
Хотя вот я лично делал все сам - прописывание в реестр, создание ленты и т.п. Чтобы самому, так сказать, все прочувствовать )) В итоге достаточно один раз выполнить процедуру загрузки dll через NETLOAD - она сама все дальше сделает
Ну это понятно, это я уже много раз делал. Пользователи хотят сами ставить ее, а вот это все им проделывать как-то лень, да и не у всех хватате компетенции - хотят чтобы было все красиво - инсталлятор что бы сам все сделал.
Андрей Бушман, про файл CUI\CUIX - логично. Спасибо за совет. Про реестр понятно, а как добавить каталог в доверенные? тоже через реестр? И еще - стоит ли тащить dll из SDK или напрямую прописывать их из каталога autocad?
Пойду читать про wix.
Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 14-01-2016, 12:26:15
Про реестр понятно, а как добавить каталог в доверенные? тоже через реестр?
Я бы рекомендовал делать это средствами AutoCAD .NET API в коде метода Initialize(): проверять наличие нужных путей (и добавлять их в случае надобности). Пример кода (правда применительно к каталогам поиска) можешь глянуть здесь (https://sites.google.com/site/bushmansnetlaboratory/moi-zametki/rabota-s-katalogami-poiska). Предполагаю, что записи о доверенных каталогах так же хранятся в реестре по аналогичному принципу и подправить их можно аналогично.

Можно было бы и в коде MSI-пакета править соответствующую запись реестра, однако в этом случае может возникнуть проблема: если в момент установки MSI-пакета работает AutoCAD, то он не подхватит внесённые тобой в реестр изменения и перезапишет их при завершении своей работы. Поэтому вариант с Initialize() более предпочтителен.

И еще - стоит ли тащить dll из SDK или напрямую прописывать их из каталога autocad?
Зачем "тащить"? CopyLocal должен быть False. Я использую (как правило) то, что даётся в SDK (тем более, что использую удалённую отладку (http://bushman-andrey.blogspot.ru/2014/03/blog-post.html)).
Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 14-01-2016, 12:35:42
Как вариант: в коде своего MSI-пакета ты можешь программно вычислить, какие акады установлены на компьютере. Сделать это можно путём циклического парсинга имён всех подветвей первого уровня каждой записи, присутствующей в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD. На основе этого можно принять решение о том, для каких версий акада следует выполнить регистрацию плагина в реестре для автозагрузки (у юзеров ведь могут присутствовать не только "голые" акады, но и "вертикалки"). Для парсинга ключей, опять же - как вариант, можно воспользоваться этим (https://bitbucket.org/Andrey-Bushman/acadkeyparser/wiki/Home). Ниже, во вложенном файле, на скрине подсвечены имена, по которым можно определить к какому акаду относятся настройки в подветвях.

Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 14-01-2016, 12:58:01
На всякий случай поясняю - если ты решишь оформлять свой плагин в виде Bundle-пакета и использовать его в AutoCAD 2012 или более новой версии, то регистрировать его в реестре нет необходимости.

А что касается добавления доверительных каталогов в процессе установки плагина... Я буду бить пользователей линейкой по рукам, если узнаю, что они пытаются установить себе (или соседу) подобный плагин, создавая тем самым потенциальную возможность для запуска вирусов в акаде. Где гарантия, что для каталога, который ты хочешь добавить в доверенные, нет прав для записи и у других пользователей? Если такой доступ у них есть, то кто может гарантировать, что кто-то из них (или зловредный код, работающий с их правами) не поместит в назначенный тобою доверенный каталог что-то такое, что будет запущено в акаде и нанесёт вред? Есть стандартный набор доверительных каталогов - вот их и следует использовать. Чем не устроил стандартный набор доверенных каталогов? Вопрос риторический.

Решение о добавлении нового доверительного каталога должно приниматься либо администратором домена, либо, на крайний случай - самим пользователем, но никак не разработчиком плагина.
Название: Re: Инсталлятор для новичков
Отправлено: Александр Ривилис от 14-01-2016, 15:30:42
%SystemDrive%:\ProgramData\Autodesk\ApplicationPlugins и все нижележащие каталоги автоматически доверенные. Так что если устанавливать BUNDLE в этот каталог и при установке есть права на запись в этот каталог, то дополнительно заботиться о разрешениях в AutoCAD не нужно.
Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 14-01-2016, 15:36:55
%SystemDrive%:\ProgramData\Autodesk\ApplicationPlugins и все нижележащие каталоги автоматически доверенные. Так что если устанавливать BUNDLE в этот каталог и при установке есть права на запись в этот каталог, то дополнительно заботиться о разрешениях в AutoCAD не нужно.
тогда уж не %SystemDrive%:\ProgramData\Autodesk\ApplicationPlugins, а %ProgramData%\Autodesk\ApplicationPlugins.

Вообще "родные" варианты от автодеска такие:
Цитировать
%APPDATA%/Autodesk/ApplicationPlugins.
%ProgramData%/Autodesk/ApplicationPlugins (кроме AutoCAD 2012).
%ProgramFiles%/Autodesk/ApplicationPlugins (использовался в AutoCAD 2012 но, если не мне изменяет память, может использоваться и в более новых версиях).
Название: Re: Инсталлятор для новичков
Отправлено: JohnLennin от 25-01-2016, 08:34:56
Александр Ривилис, Андрей Бушман, Спасибо Вам огромное за помощь и нформацию. Дай Вам Бог, счастья, добра, здоровья и долгих лет жизни. Что бы я без Ваших советов делал.
Название: Re: Инсталлятор для новичков
Отправлено: Андрей Бушман от 25-01-2016, 12:00:32
здоровья
Да, сейчас это актуально... :)
Название: Re: Инсталлятор для новичков
Отправлено: RevitTormentor от 18-10-2017, 20:55:31
На всякий случай поясняю - если ты решишь оформлять свой плагин в виде Bundle-пакета и использовать его в AutoCAD 2012 или более новой версии, то регистрировать его в реестре нет необходимости.

Т.е. можно bundle пакет и в 2011 поставить, только надо где то в реестре чего то прописать? Или в принципе Bundke пакеты только после >=2012 версии?
Название: Re: Инсталлятор для новичков
Отправлено: Александр Ривилис от 18-10-2017, 21:48:29
Или в принципе Bundle пакеты только после >=2012 версии?
Именно так. В реестре можно прописать загрузку dll-файла в AutoCAD, но других возможностей Bundle в версиях до 2012 нет.
Пример ветки реестра для AutoCAD 2011 Русский:

Код - Microsoft Registry [Выбрать]
  1. REGEDIT4
  2.  
  3. [HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:419\Applications\DimensionPatrol]
  4. "LOADCTRLS"=dword:0000000c
  5. "LOADER"="C:\\Users\\Rivilis-AN\\AppData\\Roaming\\Autodesk\\JTBWorld-DimensionPatrol\\2011\\JTBW-DimensionPatrol-2011.dll"
  6. "DESCRIPTION"="DimensionPatrol"
  7. "MANAGED"=dword:00000001
  8.  
  9. [HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:419\Applications\DimensionPatrol\Commands]
  10. "DIMPATROL"="DIMPATROL"
  11. "DIMPATROLCOLOR"="DIMPATROLCOLOR"
  12. "-DIMPATROLCOLOR"="-DIMPATROLCOLOR"
  13. "DIMPATROLTRANSPARENCY"="DIMPATROLTRANSPARENCY"
  14.  
  15. [HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:419\Applications\DimensionPatrol\Groups]
  16. "JTBWPLUGINS"="JTBWPLUGINS"