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

ADN Club => AutoCAD .NET API => Тема начата: Alexander Drovosekov от 29-01-2014, 16:12:32

Название: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Alexander Drovosekov от 29-01-2014, 16:12:32
Из статьи (http://adn-cis.org/autocad-2014-dlya-razrabotchikov.html) я узнал что теперь сборки скомпилированные в .NET должны грузится по другому. Безопасность и все такое... ок.
Разместил папку с файлом плагина (DLL) в директорию: C:\Program Files\Autodesk\ApplicationPlugins
Добавил в реест:

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R19.1\ACAD-D000:419\Applications\MyPlugin]
"LOADCTRLS"=dword:00000002
"LOADER"="C:\\Program Files\\Autodesk\\ApplicationPlugins\\MyPlugin\\MyPlugin_2014.dll"

Какой надо добавить ключ чтоб модуль загружался автоматически?
сейчас загрузка происходит только через netload
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Андрей Бушман от 29-01-2014, 16:19:56
Более развёрнутая информация по теме загрузки - здесь (http://bushman-andrey.blogspot.ru/2013/11/autocad.html). Там же присутствует и ссылка на тему с ответом (https://sites.google.com/site/bushmansnetlaboratory/moi-zametki/avtomaticeskaa-zagruzka-net-bibliotek/pri-pomosi-izmenenij-v-reestre) на твой вопрос.

P.S. Допустимые значения LOADCTRLS описаны здесь (https://sites.google.com/site/bushmansnetlaboratory/translate-manual/razrabotka-prilozenij-na-vb-net-i-c/rasprostranenie-vasego-prilozenia).
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Александр Ривилис от 29-01-2014, 17:32:11
Какой надо добавить ключ чтоб модуль загружался автоматически?
сейчас загрузка происходит только через netload
Подозреваю, что у тебя не хватает ключа:
Цитировать
"MANAGED"=dword:00000001


Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Alexander Drovosekov от 29-01-2014, 18:17:20
Да, именно этого ключа не хватало. Упустил из вида его. Спасибо!

ps
оффтоп: как же сложно тут на форуме с капчей написть спасибо ;)
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Александр Ривилис от 29-01-2014, 18:18:28
Не расстраивайся. Это только первые два или три сообщения. Потом не будет спрашивать.
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Alexander Drovosekov от 30-01-2014, 11:52:54
Возможно кому-то пригодится. Нашел вот такой код для регистрации плагина в автозагрузу автокада:
Код - C [Выбрать]
  1. public void RegisterMe()
  2. {
  3.     //AutoCAD (or vertical) and Application keys
  4.     Microsoft.Win32.RegistryKey acadKey =
  5.         Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
  6.             HostApplicationServices.Current.MachineRegistryProductRootKey);
  7.  
  8.     Microsoft.Win32.RegistryKey acadAppKey = acadKey.OpenSubKey("Applications", true);
  9.  
  10.     string curAssemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
  11.     string curAssemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
  12.     string curAssemblyFullName = System.Reflection.Assembly.GetExecutingAssembly().GetName().FullName;
  13.  
  14.     //already registered?
  15.     String[] subKeyNames = acadAppKey.GetSubKeyNames();
  16.  
  17.     foreach (String subKeyName in subKeyNames)
  18.     {
  19.         if (subKeyName.Equals(curAssemblyName))
  20.         {
  21.             Microsoft.Win32.RegistryKey subkey = acadAppKey.OpenSubKey(subKeyName, true);
  22.             subkey.SetValue("LOADER", curAssemblyPath, Microsoft.Win32.RegistryValueKind.String);
  23.             subkey.Close();
  24.             acadAppKey.Close();
  25.             return;
  26.         }
  27.     }
  28.  
  29.     //create the addin key
  30.     Microsoft.Win32.RegistryKey acadAppAddInKey = acadAppKey.CreateSubKey(curAssemblyName);
  31.  
  32.     acadAppAddInKey.SetValue("DESCRIPTION", curAssemblyFullName, Microsoft.Win32.RegistryValueKind.String);
  33.     acadAppAddInKey.SetValue("LOADCTRLS", 14, Microsoft.Win32.RegistryValueKind.DWord);
  34.     acadAppAddInKey.SetValue("LOADER", curAssemblyPath, Microsoft.Win32.RegistryValueKind.String);
  35.     acadAppAddInKey.SetValue("MANAGED", 1, Microsoft.Win32.RegistryValueKind.DWord);
  36.  
  37.     acadAppKey.Close();
  38. }

и этот же кода для VB.NET:
Код - Visual Basic [Выбрать]
  1.         <CommandMethod("RegMe")> _
  2.         Public Sub RegisterMe()
  3.             'AutoCAD (or vertical) and Application keys
  4.            Dim acadKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(HostApplicationServices.Current.MachineRegistryProductRootKey)
  5.  
  6.             Dim acadAppKey As Microsoft.Win32.RegistryKey = acadKey.OpenSubKey("Applications", True)
  7.  
  8.             Dim curAssemblyName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  9.             Dim curAssemblyPath As String = System.Reflection.Assembly.GetExecutingAssembly().Location
  10.             Dim curAssemblyFullName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().FullName
  11.  
  12.             'already registered?
  13.            Dim subKeyNames As [String]() = acadAppKey.GetSubKeyNames()
  14.  
  15.             For Each subKeyName As [String] In subKeyNames
  16.                 If subKeyName.Equals(curAssemblyName) Then
  17.                     Dim subkey As Microsoft.Win32.RegistryKey = acadAppKey.OpenSubKey(subKeyName, True)
  18.                     subkey.SetValue("LOADER", curAssemblyPath, Microsoft.Win32.RegistryValueKind.[String])
  19.                     subkey.Close()
  20.                     acadAppKey.Close()
  21.                     Return
  22.                 End If
  23.             Next
  24.  
  25.             'create the addin key
  26.            Dim acadAppAddInKey As Microsoft.Win32.RegistryKey = acadAppKey.CreateSubKey(curAssemblyName)
  27.  
  28.             acadAppAddInKey.SetValue("DESCRIPTION", curAssemblyFullName, Microsoft.Win32.RegistryValueKind.[String])
  29.             acadAppAddInKey.SetValue("LOADCTRLS", 14, Microsoft.Win32.RegistryValueKind.DWord)
  30.             acadAppAddInKey.SetValue("LOADER", curAssemblyPath, Microsoft.Win32.RegistryValueKind.[String])
  31.             acadAppAddInKey.SetValue("MANAGED", 1, Microsoft.Win32.RegistryValueKind.DWord)
  32.  
  33.             acadAppKey.Close()
  34.         End Sub

отсюда (http://forums.autodesk.com/t5/NET/AutoCAD-2014-Automatic-dll-loading/td-p/4580115#)
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Андрей Бушман от 30-01-2014, 12:38:11
Возможно кому-то пригодится. Нашел вот такой код для регистрации плагина в автозагрузу автокада:
В обозначенном коде регистрация проводится посредством кода, запущенного в AutoCAD. Давно существует библиотека (http://bushman-andrey.blogspot.ru/2012/11/autocad.html), позволяющая получать полный расклад по установленным на локальной (или удалённой) машине версиям AutoCAD, их обновлениям, а так же управлять их различными настройками, например настройками автозагрузок плагинов как в Applications веток HKLM\HKCU, так и в настройках профиля AutoCAD (Startup Suite). Причём библиотека самостоятельная (не плагин AutoCAD) и может быть использована во внешних приложениях (собственно для этого и писалась). Документация на русском ломанном английском прилагается.

Изначально в библиотеке присутствовал функционал управления BUNDLE пакетами, но из "религиозных соображений", позднее я его исключил из набора, правда править документацию уж не стал - в ней остались примеры того, как библиотека работала с BUNDLE пакетами (см. файл How to do... -> Edit an info -> Edit a 'bundle' info).
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Alexander Drovosekov от 30-01-2014, 12:59:15
Давно существует библиотека (http://bushman-andrey.blogspot.ru/2012/11/autocad.html)

отличная вещь! буду использовать для полноценного инсталятора. Спасибо Андрей!
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: xSAKABSx от 30-01-2014, 15:57:58
А чем вам не нравиться инструмент с бандлами?
без ковыряния в реестре ?
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Александр Ривилис от 30-01-2014, 16:02:42
А чем вам не нравиться инструмент с бандлами?
без ковыряния в реестре ?
1) Годится только для последних трех версий AutoCAD
2) Спецификация BUNDLE еще не устоялась на 100%
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Андрей Бушман от 30-01-2014, 16:05:40
1) Годится только для последних трех версий AutoCAD
Это не аргумент, т.к. легко реализуется и для более ранних версий (изначально я так и сделал). Второй обозначенный пункт - это именно оно.
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Александр Ривилис от 30-01-2014, 16:07:58
Это не аргумент, т.к. легко реализуется и для более ранних версий (изначально я так и сделал).
Ты путаешь свою реализацию и встроенную в AutoCAD. Согласись, что это не одно и тоже.
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Андрей Бушман от 30-01-2014, 16:13:07
Ты путаешь свою реализацию и встроенную в AutoCAD. Согласись, что это не одно и тоже.
Это может волновать только тех, кому "шашечки" нужнее, чем "ехать". Важен результат. ObjectARX SDK на то и даётся, чтобы можно было реализовать то, что не реализовано Autodesk. А если из каких-либо соображений предпочитать использовать только то, что "из коробки", то какой смысл браться программировать вообще?
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: xSAKABSx от 30-01-2014, 16:27:36
Ты путаешь свою реализацию и встроенную в AutoCAD. Согласись, что это не одно и тоже.
Это может волновать только тех, кому "шашечки" нужнее, чем "ехать". Важен результат. ObjectARX SDK на то и даётся, чтобы можно было реализовать то, что не реализовано Autodesk. А если из каких-либо соображений предпочитать использовать только то, что "из коробки", то какой смысл браться программировать вообще?

По поводу из коробки, это способ из коробки не заставляет загаживать реестр,
во вторых это дает мультиверсионность: У меня 12 и 14 кады стоят,
и я не мучаюсь тем чтобы при каком либо обновлении или дополнении плагина  лезть в реестр

да я потратил некоторое время на то чтоб  понять их файлик .xml

Но когда у тебя плагин состоит из dll,lsp,xml,cuix и кучи доп файлов,
для разных кадов они разные,
Родная автозагрузка это просто благодать !


Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Александр Ривилис от 30-01-2014, 16:30:24
У меня 12 и 14 кады стоят
Ну если ты пишешь для себя или для организации, в которой только эти версии, то возможно это самый приемлемый вариант.
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Андрей Бушман от 30-01-2014, 16:48:08
и я не мучаюсь тем чтобы при каком либо обновлении или дополнении плагина  лезть в реестр
Я тебя туда и не заставляю лезть. Мой загрузчик для 2009-го оперирует настройками xml, а не реестра.
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Александр Ривилис от 30-01-2014, 16:49:31
Мой загрузчик для 2009-го оперирует настройками xml, а не реестра.
Но сам то "загрузчик" должен быть зарегистрирован через реестр. :)
Название: Re: Что надо сделать чтоб загрузить плагин в ACAD2014?
Отправлено: Андрей Бушман от 30-01-2014, 16:56:46
Но сам то "загрузчик" должен быть зарегистрирован через реестр. 
да, но одну запись можно и в реестре зарегистрировать - это  не страшно. Причём делать это не обязательно вручную. Я делаю так (AutoLoadSwitcher.exe).