Я так понимаю делов-то, свой бондл записать в %Appdata%\Autodesk\ApplicationPlugins,Для себя написал простейший "инсталятор", который именно это и делает.
Но вот засада, он упорно к моему пути добавляет впереди "C:\Program Files"Он все правильно делает. PROGRAMDATA Возвращает путь к каталогу C:\ProgramData\ (аналогично ALLUSERSPROFILE).
Он все правильно делает.Да ни чего не правильно, он к "C:\ProgramData\..." спереди ещё добавляет "C:\Program Files\" и в итоге пытается найти "C:\Program Files\C:\ProgramData\..."
Для себя написал простейший "инсталятор", который именно это и делает.
Нашёл один вариант, это создание sfx архива, который сам распаковывается куда нужно.Ну это как-то несерьезно. Приложение при этом не добавляется в список установленных программ Windows. Удалять его придется вручную. А как же священное нажатие кнопочки "принимаю" для лицензионного соглашения? :)
Приложение при этом не добавляется в список установленных программ Windows. Удалять его придется вручную.Это да :-(
А как же священное нажатие кнопочки "принимаю" для лицензионного соглашения?А это кстати есть :-)
Ну это как-то несерьезно. Приложение при этом не добавляется в список установленных программ Windows. Удалять его придется вручную. А как же священное нажатие кнопочки "принимаю" для лицензионного соглашения?Потребуется большего, допишу. Про удаление, при повторном запуске программа обнаружит, что в целевом каталоге уже лежит копия и соответственно название кнопочки поменяется на Uninstall, хотя да, в списке не появиться.
Надо бы посмотреть как туда прописываются...https://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v=vs.85).aspx
На неспешное создание с нуля простейшего инсталлятора для Bundle с помощью WIX требуется около 15 минут:Начал смотреть обозначенное видео, но в виду отсутствия звука и каких-либо поясняющих текстовых комментариев закрыл через 15 секунд.
Например, качественный инсталлятор для Bundle-пакетов, на мой взгляд, должен в процессе установки предоставлять пользователю возможность выбрать один из заранее предопределённых каталогов установки, в которых загрузчик акада выполняет поиск пакетов. Так же, в зависимости от выбранного каталога, инсталляция должна выполняться либо с правами обычного юзера, либо с правами админа. В меню "Пуск -> Все программы", так же должен присутствовать соответствующий набор пунктов меню (справка, лицензия, установка, открытие в проводнике каталога пакета и т.п.)Да, в целом все верно, так было бы не плохо...
Но инсталлятор от Autodesk сам не обладает всеми этими качествами.Вряд ли это тот образец качества, на который стоит равняться. Если автодеск не пишет качественных инсталляторов, то это не означает, что и ты обязан поступать так же, дабы барин не обиделись... Если тебя устраивает качество\возможности твоих инсталляторов, то и ладно. А если нет - то WIX может существенно помочь.
На неспешное создание с нуля простейшего инсталлятора для Bundle с помощью WIX требуется около 15 минут:Посмотрел видео. Без описания, не понимаю большую часть. особенно вот этот момент, как файлы записать, ещё и с папками чтоб они потом туда устанавливались.
Если тебя устраивает качество\возможности твоих инсталляторов, то и ладно.Ну если учесть что я вообще не умею инсталляторы создавать, то я был более чем доволен, тем что мне Autodesk сделал.
Без описания, не понимаю большую часть. особенно вот этот момент, как файлы записать, ещё и с папками чтоб они потом туда устанавливались.Если ты захочешь взяться за WIX, то для изучения будут полезны например такие ресурсы:
Начал смотреть обозначенное видео, но в виду отсутствия звука и каких-либо поясняющих текстовых комментариев закрыл через 15 секунд.На ютубе ответил. Для тех, кому некогда смотреть видео, здесь выложен проект ;)
как файлы записать, ещё и с папками чтоб они потом туда устанавливались.Все это описывается в файле Product.wxs. Добавил комментарии:
Если ты захочешь взяться за WIX, то для изучения будут полезны например такие ресурсы:Ну как бы не очень хотелось браться, Дмитрий уже почти научил, осталось ещё чуть-чуть разобраться.
http://wixtoolset.org/documentation/
http://www.allitebooks.com/wix-3-6/
http://www.allitebooks.com/wix-cookbook/
справка, лицензия, установка, открытие в проводнике каталога пакета и т.п.вот это кстати вообще лишнее по-моему, кто у нас справки\лицензии читает? Я уже для своих приложений видеосправку (https://youtu.be/SwAo3JK-plM)записал с удобной навигацией, и даю ссылку на неё при всех упоминаниях о приложении, и из самого приложения нажав кнопку "Справка" запускается в браузере это видео, но нет, каждый 3 спрашивает, а как это , а как то, а можно ли так, даже 5-ти минутный ролик посмотреть не могут, а ты им хочешь ещё и лицензию на 27 страниц дать почитать?
Нашёл книгу на русском http://wixbook.codeplex.com/Спасибо за ссылку, полистаю контент на досуге.
Я уже для своих приложений видеосправку записал с удобной навигацией, и даю ссылку на неё при всех упоминаниях о приложении, и из самого приложения нажав кнопку "Справка" запускается в браузере это видеоИнтересное решение. Запомню.
но нет, каждый 3 спрашивает, а как это , а как то, а можно ли так, даже 5-ти минутный ролик посмотреть не могутПроблема распространённая. В подобных случаях я указываю юзеру конкретный раздел справки и предлагаю обращаться ко мне с конкретными вопросами, сообщая о том, в каком месте в ходе выполнения инструкции у него возникли проблемы. Это вынуждает юзера прочитать справку\инструкцию. Как правило (в 99,9% случаях) это работает.
а ты им хочешь ещё и лицензию на 27 страниц дать почитать?Я не знаю, где ты там 27 страниц нашёл.
вот это кстати вообще лишнее по-моему, кто у нас справки\лицензии читает?Я не настаиваю, это твоё личное дело.
И речь об инсталляторе я завел не для крупных мега приложений, а для мелких Lisp'ов, не прям совсем простых, а которые уже с диалогом, с панелькой на ленте, с кнопочкой...Для меня это аргумент не убедителен (не вижу никакой связи). Но опять же повторюсь - это твоё личное дело. Не хочешь - не делай. :)
Но куда деть мои файлы для установки, загрузить их как ресурсы в проект?Как ресурсы не нужно. Можно вообще не добавлять в проект, просто в поле Source указать полный или относительный путь к файлу. Ну или можно добавить файл в проект, тогда никакого пути указывать не нужно. Только потом нужно будет не забыть его заменить, если он изменится. Как это сделать: http://autode.sk/2cy5Gig. Заранее прошу прощения, что снова без звука.
Можно вообще не добавлять в проект, просто в поле Source указать полный или относительный путь к файлу. Ну или можно добавить файл в проект, тогда никакого пути указывать не нужно.Т.е. так для каждого файла, даже если их 43 штуки?
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?Чего не знаю, того не знаю. Возможно, что как-то это можно сделать. Я всегда по одному файлу настраивал, но их максимум с десяток набиралось.
Т.е. так для каждого файла, даже если их 43 штуки?Насколько я помню - нельзя. WIX оперирует понятиями "компонент", "группа компонентов" и feature ("фича" - х.з. как лучше перевести в данном контексте - это набор групп компонентов, которые ты хочешь установить, устанавливая для них галочки в окне установки). Компонентом, в свою очередь, может быть не только файл но, например, операция создания каталога и т.п. В составе одного компонента может быть определене сразу несколько элементов. Компонент - это минимальная единица, которая может быть инсталлирована, деинсталлирована или пропатчена. В виду этого WIX требует, чтобы каждый файл указывался отдельно. В мануалах, насколько я помню, пишут, что инсталлятор должен писаться (по задумке) параллельно с целевым проектом, добавляя в конфигах инсталлера новые компоненты по мере развития целевого проекта.
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?
Возник вопрос с инсталлятором для Lisp в предыдущих версиях AutoCAD не поддерживающих технологию бондул? Очень много динозавров среди пользователей не желающих переходить на новые версии...Добавь в инсталлятор регистрацию твоего лиспа в реестре. Хотя... Это может оказаться не так уж и просто, т.к. разные акады и их верт. приложения используют разные ключи реестра. Т.е. тебе в инсталляторе нужно будет узнать, какие акады установлены, дабы знать куда вносить правки...
Добавь в инсталлятор регистрацию твоего лиспа в реестре.А ну теперь то всё понятно стало...
Добавь в инсталлятор регистрацию твоего лиспа в реестре. Хотя... Это может оказаться не так уж и просто, т.к. разные акады и их верт. приложения используют разные ключи реестра. Т.е. тебе в инсталляторе нужно будет узнать, какие акады установлены, дабы знать куда вносить правки...Вообще-то lisp-файлы не регистрируются в реестре. Этот принцип работает только с arx/dbx/crx/dll. Можно написать arx/dll, которая будет регистрироваться в реестре и в свою очередь загружать lisp-файлы. Фактически автозагрузчик работает именно по такому принципу.
Вообще-то lisp-файлы не регистрируются в реестре.Вообще-то регистрируются. Тот самый "Чемоданчик" в известном окне хранит свои элементы в реестре. Я давно этим пользуюсь для программной регистрации лиспов в реестре.
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7001:409\Profiles\<<Unnamed Profile>>\Dialogs\Appload\Startup]
"NumStartup"="1"
"1Startup"="C:\\shared\\hello.lsp"
Андрей, ты хороший парень, и отзывчивый и специалист в своём деле. Но ты пожалуйста учитывай подписи под аватарками, вот у тебя написано "Программист. Администратор CAD.", но у меня же "Геодезист"Извини, если чем-то обидел. Я как-то не ставил себе такой задачи... Если что-то из того, что я пишу, тебе не понятно - ты не стесняйся спрашивать. Я понимаю, что то, что очевидно для одного человека, не всегда очевидно для другого (по тем или иным причинам). Так же не исключено, что временами текст, набираемый мною может кем-то быть истолкован двояко (чего я мог и не заметить в процессе его публикации).
Я честно даже был смущён немного, когда меня в члены ADN Club записали.
А ну теперь то всё понятно стало...Если ты хочешь в инсталляторе прописать конкретные версии AutoCAD и его верт. продуктов, то это действительно не будет представлять сложности, но если ты хочешь универсальный, то тут придётся попотеть. Второй вариант реализовать можно, но я такого пока не делал (т.е. такого опыта у меня ещё нет). Я знаком с WIX весьма поверхностно.
Вообще-то lisp-файлы не регистрируются в реестре.Вообще-то регистрируются. Тот самый "Чемоданчик" в известном окне хранит свои элементы в реестре. Я давно этим пользуюсь для программной регистрации лиспов в реестре.
Вот экспортированная из реестра запись автозагрузки лиспа C:\shared\hello.lsp для обычного AutoCAD 2009:Андрей. Это крайне ненадежная схема, которую можно использовать для себя, в крайнем случае в небольшой организации с десятком проектировщиков. Но предложить хорошее альтернативное решение для старых версий AutoCAD, которое использовало бы только lisp я не могу. Увы.Код: [Выделить][HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7001:409\Profiles\<<Unnamed Profile>>\Dialogs\Appload\Startup]
"NumStartup"="1"
"1Startup"="C:\\shared\\hello.lsp"
Параметр NumStartup должен указывать количество параметров в реестре (правда почему-то в виде строки, но это уж вопрос к доске, а не ко мне). Минус в том, что подобная регистрация прописывается только в профилях AutoCAD, но это опять же вопрос не ко мне...
Это крайне ненадежная схема, которую можно использовать для себя, в крайнем случае в небольшой организации с десятком проектировщиков.Почему? Ведь это уже гарантированно не измениться для старых версий, а для новых есть .bundle
Я честно даже был смущён немного, когда меня в члены ADN Club записали.Я надеюсь, что смущение - это единственное чувство и серьезных возражений против это нет. :)
Андрей. Это крайне ненадежная схема,Я в курсе и обозначил это как "минус" выше. Способ обозначен мною как "на безрыбье и рак рыба" показывая, как можно обойтись только средствами лиспа. То что этот способ "плохо пахнет" - я согласен на 100%.
Почему? Ведь это уже гарантированно не измениться для старых версий, а для новых есть .bundleПотому что очень хрупкий, в виду того, что это изменение нужно выполнять во всех существующих профилях AutoCAD. Если юзер создаст новый профиль автокада и переключится на него, то автозагрузка происходить не будет (ежели юзер сам не добавит в "чемоданчик" нового профиля соответствующий набор записей). Кстати, инсталлятору в этом случае нужно будет либо править текущий профиль акада, либо в итерации проходить по всем имеющимся (на усмотрение разработчика инсталлера).
Или я опять, что то не доглядел?
Почему? Ведь это уже гарантированно не измениться для старых версий, а для новых есть .bundle1. Пользователь случайно может удалить из "чемоданчика" нужные для загрузки файлы.
Или я опять, что то не доглядел?
Если юзер создаст новый профиль автокада и переключится на него, то автозагрузка происходить не будет (ежели юзер сам не добавит в "чемоданчик" нового профиля соответствующий набор записей)Кстати, рекомендуемый в первую очередь во всех непонятных ситуациях с неработающим/полуработающим AutoCAD сброс профиля также приводит к очистке "чемоданчика".
Кстати, рекомендуемый в первую очередь во всех непонятных ситуациях с неработающим/полуработающим AutoCAD сброс профиля также приводит к очистке "чемоданчика".В общем-то именно это я и имел в виду. :)
Ведь это уже гарантированно не измениться для старых версий, а для новых есть .bundleПричем для новых, начиная с 2016 я такой ветки и не нашёл
серьезных возражений против это нетКонечно нет, ещё до прихода сюда я думал что я немного программист, но пообщавшись тут, понял, что я всего-лишь инженер использующий инструменты Lisp ;-)
Если юзер создаст новый профиль автокадаЧто-то мне подсказывает, что пользователей сидящий на 2008 AutoCAD'е не совсем знает как и зачем создавать профили.
Можно написать arx/dll, которая будет регистрироваться в реестре и в свою очередь загружать lisp-файлы.А запускать этот arx/dll может WIX установщик?
Хорошо, если это не вариант. ТогдаЗапускать его не нужно. Он прописывается установщиком в реестр и AutoCAD читая реестр знает, что его нужно загрузить.
Цитата: Александр Ривилис от 27-09-2016, 10:46:31
Можно написать arx/dll, которая будет регистрироваться в реестре и в свою очередь загружать lisp-файлы.
А запускать этот arx/dll может WIX установщик?
Что-то мне подсказывает, что пользователей сидящий на 2008 AutoCAD'е не совсем знает как и зачем создавать профили.Эх... Моя практика показывает, что в AutoCAD 2009 даже далеко не самые продвинутые пользователи зачастую знают, как создавать профиль акада и делать в нём базовые, нужные им настройки. Даже если кто-то из них не знал этого, то др. сотрудники запросто показывают им как это делается.
Опять же что вот это значит "ACAD-7001:409" они какие-то разные у разных версий.Помнится я выкладывал исходный код проекта, который парсил подобные ключи и на форуме давал ссылку. По этому ключу ты можешь определить год выпуска акада, название верт. продукта и его локализацию.
А запускать этот arx/dll может WIX установщик?Я не понял вопроса. Зачем тебе это?
Опять же что вот это значит "ACAD-7001:409" они какие-то разные у разных версий.Вот, из-за тебя снова открыл публичный доступ: https://bitbucket.org/Andrey-Bushman/acadkeyparser/wiki/Home
На мой взгляд, лиспописателям проще было бы написать одну управляемую DLL, задачей которой является загрузка лиспов, перечень которых определён в некотором XML-файлеЗачем в неком, пусть сам смотрит во всех PackageContents.xml ,что найдёт во всех BUNDLE лежащих в C:\ProgramData\Autodesk\ApplicationPlugins и если нашёл там Lisp, загружает его.
Лучше прописывать в HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:ZZZ\Applications и тогда приложение будет доступно всем пользователям.А откуда установщик узнает все варианты этих ХХ.Х и YYY:ZZZ ?
Зачем в неком, пусть сам смотрит во всех PackageContents.xml ,что найдёт во всех BUNDLE лежащих в C:\ProgramData\Autodesk\ApplicationPlugins и если нашёл там Lisp, загружает его.Согласен, так было бы более грамотно. :)
А откуда установщик узнает все варианты этих ХХ.Х и YYY:ZZZ ?Выше я тебе дал ссылку на проект. Там присутствует XML-файл, содержащий информацию о существующих версиях акада и его вертикалках. По мере выхода новых версий, в этот файл нужно добавлять соответствующий набор записей (копируешь предыдущий и вносишь необходимые правки, как правило - просто меняешь значение года и его маркер). Файл можешь глянуть даже онлайн: https://bitbucket.org/Andrey-Bushman/acadkeyparser/src/382a1e4287de3be2139c30526c2c21fb69c02632/AcadKeyParser/AcadKeyParser.data.xml?at=master&fileviewer=file-view-default
Там присутствует XML-файл, содержащий информацию о существующих версиях акада и его вертикалках.Подожди, а нам зачем это?
Мне показалось, что нужно сначала прочитать HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD, а потом для всех там найденных RXX.X меньше R19.0 прочитать HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\RХХ.Х и уже во всех найденных ACAD-YYY:ZZZ проверить, если есть HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R19.0\ACAD-B001:409\Applications то туда и прописать нашу волшебную dllКстати, R18.2 - это AutoCAD 2012, который тоже понимает BUNDLE-пакеты. Это самая первая версия, которая поддерживает BUNDLE.
Кстати, R18.2 - это AutoCAD 2012, который тоже понимает BUNDLE-пакеты.Да, но по-умолчанию тот же App Store предлагает выбирать только с 2014 версии.
Подожди, а нам зачем это?
Понятно что по коду продукта ты узнаешь, что это и какого года. Но нам та это вроде не нужно.
Опять же что вот это значит "ACAD-7001:409" они какие-то разные у разных версий? А откуда установщик узнает все варианты этих ХХ.Х и YYY:ZZZ ?
Ну научимся мы(lisp'описы) lisp подгружать, но ещё же останется панелька с кнопочкой :-D Или её (простую панель, не на ленте) можно из Lisp создать?В составе конфигурационного файла всё того же BUNDLE-пакета ты указываешь, какие менюшки и панельки (CUI\CUIX-файлы) нужно подгружать.
В составе конфигурационного файла всё того же BUNDLE-пакета ты указываешь, какие менюшки и панельки нужно подгружать.Да, но 2008 AutoCAD не поймёт CUIX файл предназначенный для 2014-го, хотя можно туда прописать для всех версий AutoCDA, кому mnu, кому cui, а кому cuix
Да, но 2008 AutoCAD не поймёт CUIX файл предназначенный для 2014-го, хотя можно туда прописать для всех версий AutoCDA, кому mnu, кому cui, а кому cuixПохоже ты не очень знаком с форматом конфигурационного файла BUNDLE-пакетов. Рекомендую почитать о нём в справке акада (только английского, ни в коем случае не русского). В конфигурационном файле пакета ты создаёшь компоненты и для каждого из них указываешь условия (например целевые версии акадов), при соблюдении которых содержимое компонента должно быть подгружено. Соответственно, в зависимости от того, в какой акад грузится пакет, будут загружаться те или иные компоненты (DLL, ARX, LSP, CUI\CUIX и т.п.).
И т.е. эта волшебная dll-ка которая нам пропишет Lisp, она же может прописать и mnu\cui?Не пропишет, а подгрузит - это уж как реализуешь. Программно подгружать MNU\CUI\CUIX можно (API предоставляет такую возможность, к счастью).
И т.е. эта волшебная dll-ка которая нам пропишет LispЗдесь можешь глянуть варианты регистраций "волшебных библиотек" для их автозагрузки: https://sites.google.com/site/bushmansnetlaboratory/moi-zametki/avtomaticeskaa-zagruzka-net-bibliotek
Да, но по-умолчанию тот же App Store предлагает выбирать только с 2014 версии.Там заявлена поддержка только последних трёх версий.
Т.е. так для каждого файла, даже если их 43 штуки?Наткнулся на интересную статью по этому вопросу. Сам еще не проверял, но есть подозрение, что решение вполне годное: https://habrahabr.ru/post/122038/
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?
Нашёл книгу на русском http://wixbook.codeplex.com/
Наверное, надо добавить в свойства русскую локализацию.Точна, как ты и показывал ещё в первом видео!
В книге по WIX есть подробное описание создания самого простого инсталлятора.Да я начинал читать, там как обычно сначала всё просто и понятно, а потом бац и не понятно... У меня так же было и с книгой Полещука по AutoLISP, первые приложения только с помощью command и простейших функций, потом научился со списками работать, и лишь потом к актив Х перешёл, но всё это было плавно долго и постоянно практикуясь.
Да я начинал читать, там как обычно сначала всё просто и понятно, а потом бац и не понятно...Знакомая ситуация :) Тут помогает только практика.
Я даже книгу по С# купил, тоже читать начинал, а что толку без практики :-(Если сразу браться за серьезный мануал типа "Полное руководство по C# для профессионалов", то очень быстро желание изучать пропадает начисто и надолго. Такие мануалы лучше читать, имея за плечами уже кое-какой багаж практики. Лучше поначалу что-то типа такого: http://progbook.ru/c-sharp-net/1404-stillmen-izuchaem-c-2-e-izdanie.html. Там практика идет параллельно с теорией.
так же и инсталлятором, прошлый раз всё получилось, на том и успокоился, и только сейчас опять спустя много времени, вернулся к немуДа у меня та же история каждый раз. Инсталлятор создаю новый от силы раз в полгода, если не реже. И каждый раз нужно вспоминать, как там и что. Но с каждым разом все легче, т.к. уже знаешь, на чем можно споткнуться. К слову, я спотыкался на этих же самых граблях, поэтому знаю что подсказать.
Сегодня почти весь день воевал с этим сборщиком. Но, должен сказать, оно того стоило! Это просто подарок! Собирает все файлы, соблюдая структуру папок. Присваивает самостоятельно GUIDы. Все что мне было нужно удалось в итоге настроить.Т.е. так для каждого файла, даже если их 43 штуки?Наткнулся на интересную статью по этому вопросу. Сам еще не проверял, но есть подозрение, что решение вполне годное: https://habrahabr.ru/post/122038/
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?
Ну и описание на сайте WIX: http://wixtoolset.org/documentation/manual/v3/overview/heat.html