| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Инсталлятор плагинов для AutoCAD

Инсталлятор плагинов для AutoCAD

Ответ
Поиск в этой теме
Непрочитано 22.02.2016, 20:58 #1
Инсталлятор плагинов для AutoCAD
Нефтепроводчик
 
Регистрация: 17.03.2009
Сообщений: 114

Сразу прошу не посылать в поиск и не удалять тему, так как поиском пользовался и полноценного решения для AutoCAD я не нашел, особенно для версий AutoCAD старше 2014.
Итак, сама задача: создать инсталлятор плагинов для AutoCAD, который не должен быть зависим от версии AutoCAD.
Что инталлятор должен делать:
1. Проанализировать, установлена хотя бы одна версия AutoCAD или продуктов на базе AutoCAD. Если нет - завершение установки.
2. Уведомить пользователя, что плагин будет установлен для данной версии AutoCAD. Если на компьютере установлено несколько версий AutoCAD, предложить пользователю выбрать, на какие версии (одну или несколько) будет установлен плагин.
3. Распаковать файлы плагина в определенную папку, по умолчанию, например, в "c:\Program Files\<папка плагина>" или другое место по выбору пользователя.
4. Для выбранной версии (версий) AutoCAD прописать в путях поддержки AutoCAD путь к папке плагина.
5. Разрешить загрузку (автозагрузку) в AutoCAD исполняемых файлов (lsp, arx и пр.) из папки плагина.
6. Подгрузить кастомное меню (файл с расширением cuix) в AutoCAD. Сделать его активным для текущего рабочего пространства.
7. Сообщить о завершении установки. Предложить запустить версию AutoCAD, если он еще не запущен, на которую был установлен плагин.

Как видно, все не сводится к банальному "разархивировал, запустил".
Итак, способы и проблемы реализации.
1. Смотрим в сторону популярной системы создания инсталляторов "Inno Setup". Она может решить пп. 1...4 и 7, при этом придется поработать с реестром. В реестре нужно найти установленные версии AutoCAD. По сложной маске найти определенные записи и к ним дописать пути. Например, для моей версии AutoCAD пути прописаны в ключе реестра
HKEY_USERS\...\Software\Autodesk\AutoCAD\...\ACAD-...\Profiles\...\General\ACAD. Здесь "..." - переменные значения: номер компьютера, версия AutoCAD, код продукта AutoCAD, имя профиля пользователя. Т.е. найти нужный ключ не так просто. Если у кого-нибудь есть скрипты Inno Setup, решающие эту проблему, прошу выложить.
2. Альтернативный способ.
Как знакомый с atolisp я бы добавление путей поддержки AutoCAD решил бы командами: vla-get-supportpath и vla-put-supportpath. Например, так:
Код:
[Выделить все]
 
(vl-load-com)
;;; Функция добавления пути доступа к вспомогательным файлам
(defun AddPath	(name support / files paths)
  (setq	files (vla-get-files (vla-get-preferences (vlax-get-acad-object)))
	paths (vla-get-supportpath files)
	paths (strcat paths ";" support)
  )
  (vla-put-supportpath files paths)
  (alert (strcat name " установлены для данной версии AutoCAD"))
  (princ)
)

(defun GetPathSupport (/ adoc path)
  (setq	adoc (vla-get-activedocument (vlax-get-acad-object))
	path (vla-get-path adoc)
	path (strcat (vl-string-right-trim "install" path) "support")
  )
)

;;; Добавляем пути к нашим папкам
(AddPath "Ваш плагин" (GetPathSupport))

;;; Просим перезагрузить AutoCAD
(alert "Пожалуйста, перезапустите AutoCAD")

Этот код помещаем в файл acaddoc.lsp, рядом создаем пустой файл install.dwg. Инталлятор натравливаем на открытие этого файла по завершению установки. Открывается файл, запускается acaddoc.lsp, прописываются пути доступа. Способ установки немного агрессивный, но вы не задаетесь вопросом, какая версия AutoCAD стоит у пользователя (установлен будет для той версии, которой открыт файл install.dwg), как называется профиль пользователя, где находятся его пути поддержки.
Установку кастомного меню можно решить аналогично. Пишем код:
Код:
[Выделить все]
 
;;; Функция загрузки меню
(defun LoaderMenu (MnuName / MnuLst)
  (vlax-for Obj	(vla-get-MenuGroups (vlax-get-acad-object))
    (setq MnuLst (cons
		   (vla-get-Name Obj)
		   MnuLst
		 )
    )
    (vlax-release-object Obj)
  )
  (if (and (findfile (strcat MnuName ".cuix"))
	   (not (member (strcase MnuName) MnuLst))
      )
    (progn
      (setvar "cmdecho" 0)
      (command "_menuload" (strcat MnuName ".cuix"))
      (setvar "cmdecho" 1)
    )
  )

  (princ)
)

;;; Загрузка меню 
(LoaderMenu "Ваше меню")

Этот код помещаем в файл acad.lsp и кидаем в путь поддержки вашего плагина. Заодно в нем можно прописать загрузку ваших lsp-файлов.
Все бы хорошо, но начиная с AutoCAD 2014 появилось целое семейство команд, запрещающие запуск файлов acaddoc.lsp, acad.lsp и вообще всех лиспов - это ACADLSPASDOC, SECURELOAD, TRUSTEDPATHS. По умолчанию они стоят в таких значениях, что автозагрузки acaddoc.lsp и acad.lsp не работают. Как их побороть - не знаю.
Соответственно, приходится искать способ решить пп. 5 и 6 с помощью Inno Setup, но как - пока не представляю.
Извиняюсь за объемный текст, но решение проблемы где-то рядом, но никак прийти не может. Хочу узнать ваш опыт, как создать полноценный инсталлятор. Мое использование atolisp - это, скорее, костыль. Хочется изящного решения средствами одной программы. Очень важно, чтобы инсталлятор правильно работал в версиях AutoCAD 2014, 2015, 2016, 2017.
В идеале инталлятор должен учитывать рекомендации Autodesk:
About Installing and Uninstalling Plug-In Applications

The plug-in auto loader mechanism allows for easier deployment of custom applications using a package format.

The package format is a common folder structure that has the extension .bundle in its name and has an XML file that defines the various components of the plug-in. By deploying custom applications as a BUNDLE, it makes it easier to target multiple operating systems and product releases since the parameters of your plug-in are defined in the XML file of the package. A BUNDLE can be used as a replacement to creating complex installer scripts when deploying a plug-in.
A plug-in can be deployed by placing it in one of the ApplicationPlugins or ApplicationAddins folders on a local drive.
General Installation folder
Windows 7 and Windows 8: %PROGRAMFILES%\Autodesk\ApplicationPlugins
All Users Profile folders
Windows 7 and Windows 8: %ALLUSERSPROFILE%\Autodesk\ApplicationPlugins
Mac OS: /Applications/Autodesk/ApplicationAddins
User Profile folders
Windows 7 and Windows 8: %APPDATA%\Autodesk\ApplicationPlugins
Mac OS: ~/Autodesk/ApplicationAddins
Note: Starting with AutoCAD 2014-based products, custom applications must work under secure mode; when the SECURELOAD system variable is set to 1 or 2. When operating under secure mode, the program is restricted to loading and executing files that contain code from trusted locations; trusted locations are specified by the TRUSTEDPATHS system variable.
When an AutoCAD-based product starts, the ApplicationPlugins or ApplicationAddins folder is checked for plug-in applications. The packages found are automatically registered and loaded based on the metadata in the XML file of each package.
Note: Starting with AutoCAD 2016-based products on Windows, it is recommended to digitally sign your custom program files. By digitally signing a custom program file, you inform the user as to who published the custom program file and if any changes were made to the file after it was digitally signed. For information on digitally signing custom program files, see the "About Digitally Signing Custom Program Files" topic.
Each custom program file loaded is check for the existence of a digital signature. If a digital signature is found attached to a custom program file, the user is presented with information about the digital certificate and publisher that signed the file. The user can choose to continue to load the file, and optionally trust all files by the publisher of the file being loaded. If no or an invalid digital signature is found, the user is informed that the program file might not be safe to load and execute.
Note: Plug-in packages placed in the %PROGRAMFILES%\Autodesk\ApplicationPlugins folder on Windows are not checked for the presence of a digital signature.
Install Plug-in Packages
A package can be deployed using an installer, such as MSI, or manually copying the files and folder structure to the ApplicationPlugins or ApplicationAddins folder. For Autodesk Exchange app downloads, deployment of the package is done using an MSI installer on Windows.
Loading Plug-ins
By default, plug-ins are automatically registered with an AutoCAD-based product and when a new plug-in is installed during the current session. The load behavior for plug-ins is controlled with the APPAUTOLOAD system variable. When APPAUTOLOAD is set to 0, no plug-ins are loaded unless the APPAUTOLOADER command is used.
Uninstall Plug-in Packages
A package can be uninstalled by removing the appropriate folder with a .bundle extension from the ApplicationPlugins or ApplicationAddins folder. This can be accomplished by offering an uninstall option with the original installer or to manually delete the .bundle folder.
Note: A plug-in downloaded from the Autodesk Exchange Apps website can also be uninstalled by re-downloading the plug-in. When the download completes, you are prompted to uninstall the plug-in.
Просмотров: 12556
 
Непрочитано 22.02.2016, 21:32
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


http://adn-cis.org/forum/index.php?topic=3331.0 прочти.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.02.2016, 21:35
#3
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Всё описанное можно сделать в InnoSetup. Некоторая сложность в том, как определить все установленные версии AutoCAD и дать пользователю выбрать требуемую. Это придется делать с помощью дополнительной DLL, запускаемой из секции Code. В DLL должен быть диалог со списком обнаруженных Автокадов.

Чтобы определить все установленные версии (включая возможные "десктопы") надо знать их признаки. В какой-то из давних тем я выкладывал программу для определения версий и просил публиковать результаты её работы, т.е. что инсталлятор должен найти.

Для пунктов 5 и 6 действия в инсталлятор зашивать не надо. Лучше сделать шаблон lsp-файла автозагрузки для профиля своего "плагина". А свой профиль надо сделать обязательно, чтобы не иметь конфликтов.

Разумеется в скрипте InnoSetup надо все пути для размещения файлов записывать в виде переменных InnoSetup в полном соответствии с требованиями Windows - тогда будет работать в любой ОС.

Подробно всё это было описано в книге "САПР на базе AutoCAD - как это делается".
ShaggyDoc вне форума  
 
Непрочитано 22.02.2016, 22:51
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Некоторая сложность в том, как определить все установленные версии AutoCAD и дать пользователю выбрать требуемую.
Если это действительно необходимо. Почему бы не дать возможность приложению загружаться во все продукты, в которых оно может работать? Как это сделать - изучайте Bundle и состав файла PackageContents.xml. Ссылка - в той теме, что Алексей указал в #2.
Тем более, что:
Цитата:
Сообщение от Нефтепроводчик Посмотреть сообщение
особенно для версий AutoCAD старше 2014
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 22.02.2016, 23:01
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Ради лиспа заниматься таким рукоблудием?.. Видимо уже все рутинные задачи автоматизированы?...
Минимальное приложение на лиспе состоит из трех файлов, чтоб оно работало, нужно потратить максимум 2 минуты времени.
Какой минимальный уровень IQ должен иметь инженер, чтоб самостоятельно устанавливать лисп-приложения на своем компьютере?
gomer вне форума  
 
Автор темы   Непрочитано 23.02.2016, 02:59
#6
Нефтепроводчик


 
Регистрация: 17.03.2009
Сообщений: 114


Цитата:
Сообщение от Do$ Посмотреть сообщение
Почему бы не дать возможность приложению загружаться во все продукты, в которых оно может работать? Как это сделать - изучайте Bundle и состав файла PackageContents.xml. Ссылка - в той теме, что Алексей указал в #2.
Да, действительно удобный механизм загрузки плагинов. Изучил, применил, составил простенький файл PackageContents.xml
Код:
[Выделить все]
 
<?xml version="1.0" encoding="utf-8"?>
<ApplicationPackage SchemaVersion="1.0"
                    AppVersion="2.0"
                    Name="Building coordinates"
                    Description="Building coordinates for AutoCAD® 2008+"
					ProductCode="{AAA}">
  <CompanyDetails 	Url="http://forum.dwg.ru/showthread.php?t=73250"/>
  <Components>
    <RuntimeRequirements OS="Win32|Win64"
					SupportPath="./Contents/Support"/>
    <ComponentEntry AppName="Building coordinates Partial Menu"
                    ModuleName="./Contents/Resources/Building_coordinates.cuix"
                    LoadOnAutoCADStartup="true" />
    <ComponentEntry AppName="Building coordinates lisp"
                    ModuleName="./Contents/BC.lsp"
                    LoadOnAutoCADStartup="true" />
	<ComponentEntry AppName="High mark lisp"
                    ModuleName="./Contents/HM.lsp"
                    LoadOnAutoCADStartup="true" />
  </Components>
</ApplicationPackage>

Остались несколько вопросов:
1. Начиная с какой версии AutoCAD, работает установка через Bundle?
2. В справке AutoCAD работа Bundle указана в ОС Windows 7 и 8. Нет оснований считать, что в Windows 10 не заработает. Но все же, почему не указаны другие ОС (Windows Vista, Windows 10, Linux) и как с ними обстоят дела?
3. В справке сказано, что
Starting with AutoCAD 2016-based products on Windows, it is recommended to digitally sign your custom program files. Each custom program file loaded is check for the existence of a digital signature. If a digital signature is found attached to a custom program file, the user is presented with information about the digital certificate and publisher that signed the file. The user can choose to continue to load the file, and optionally trust all files by the publisher of the file being loaded. If no or an invalid digital signature is found, the user is informed that the program file might not be safe to load and execute.
Note: Plug-in packages placed in the %PROGRAMFILES%\Autodesk\ApplicationPlugins folder on Windows are not checked for the presence of a digital signature.

Т.е. лучше плагины помещать в Program Files\Autodesk\ApplicationPlugins, дабы лишний раз не нервировать юзера уведомлениями?

Последний раз редактировалось Нефтепроводчик, 23.02.2016 в 03:52.
Нефтепроводчик вне форума  
 
Непрочитано 23.02.2016, 09:17
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от Нефтепроводчик Посмотреть сообщение
Начиная с какой версии AutoCAD, работает установка через Bundle?
Кажется, с 2012.
Цитата:
Сообщение от Нефтепроводчик Посмотреть сообщение
В справке AutoCAD работа Bundle указана в ОС Windows 7 и 8. Нет оснований считать, что в Windows 10 не заработает. Но все же, почему не указаны другие ОС (Windows Vista, Windows 10, Linux) и как с ними обстоят дела?
Под Linux есть ACAD?
Цитата:
Сообщение от Нефтепроводчик Посмотреть сообщение
плагины помещать в Program Files\Autodesk\ApplicationPlugins, дабы лишний раз не нервировать юзера уведомлениями?
В указанной мной ссылке есть информация по этому поводу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Инсталлятор плагинов для AutoCAD

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными Андрей Х. AutoCAD 24 27.05.2015 10:17
Autocad plugin на Delphi kolio Программирование 10 03.08.2013 22:06
Инсталлятор не находит запись AutoCAD в ветке HKEY_LOCAL_MACHINE. hwd Программирование 4 20.03.2011 13:13
AutoCAD 2009/2010 в ряде вопросов серьёзно курят перед AutoCAD 2007/2008 hwd Баги и пожелания в Autodesk 30 10.11.2010 12:56
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27