Свой инсталлятор

Автор Тема: Свой инсталлятор  (Прочитано 43012 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Свой инсталлятор
« Ответ #15 : 22-09-2016, 12:05:53 »
Но инсталлятор от Autodesk  сам не обладает всеми этими качествами.
Вряд ли это тот образец качества, на который стоит равняться. Если автодеск не пишет качественных инсталляторов, то это не означает, что и ты обязан поступать так же, дабы барин не обиделись... Если тебя устраивает качество\возможности твоих инсталляторов, то и ладно. А если нет - то WIX может существенно помочь.

P.S.
А если Autodesk App Store вдруг не будет принимать твои MSI (поддерживающие все обозначенные мною выше возможности), то нафиг такой App Store нужен? Вопрос риторический.

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Свой инсталлятор
« Ответ #16 : 22-09-2016, 12:55:10 »
На неспешное создание с нуля простейшего инсталлятора для Bundle с помощью WIX требуется около 15 минут:
Посмотрел видео. Без описания, не понимаю большую часть. особенно вот этот момент, как файлы записать, ещё и с папками чтоб они потом туда устанавливались.
Код - XML [Выбрать]
  1. Id="DllFile" Name="$(var.AutoCADTestProject.TargetFileName)"
  2.           Source="$(var.AutoCADTestProject.TargetPath)" DiskId="1" />

Если тебя устраивает качество\возможности твоих инсталляторов, то и ладно.
Ну если учесть что я вообще не умею инсталляторы создавать, то я был более чем доволен, тем что мне Autodesk сделал.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Свой инсталлятор
« Ответ #17 : 22-09-2016, 14:56:03 »
Без описания, не понимаю большую часть. особенно вот этот момент, как файлы записать, ещё и с папками чтоб они потом туда устанавливались.
Если ты захочешь взяться за WIX, то для изучения будут полезны например такие ресурсы:
http://wixtoolset.org/documentation/
http://www.allitebooks.com/wix-3-6/
http://www.allitebooks.com/wix-cookbook/

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Свой инсталлятор
« Ответ #18 : 22-09-2016, 15:42:08 »
Начал смотреть обозначенное видео, но в виду отсутствия звука и каких-либо поясняющих текстовых комментариев закрыл через 15 секунд.
На ютубе ответил. Для тех, кому некогда смотреть видео, здесь выложен проект ;)

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Свой инсталлятор
« Ответ #19 : 22-09-2016, 17:09:18 »
как файлы записать, ещё и с папками чтоб они потом туда устанавливались.
Все это описывается в файле Product.wxs. Добавил комментарии:
Код - XML [Выбрать]
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  3.   <Product
  4.    Id="B7BE0E71-F44E-44C6-BD72-DFCD82E58B40"
  5.    Name="$(var.SolutionName)"
  6.    Language="1049"
  7.    Version="1.0.0.0"
  8.    Manufacturer="DZagorulkin"
  9.    UpgradeCode="76198716-a4a2-4c1f-8acf-2cb2858b4f90"
  10.    Codepage="1251">
  11.  
  12.     <Package
  13.      SummaryCodepage="1251"
  14.      InstallerVersion="200"
  15.      Compressed="yes"
  16.      InstallScope="perMachine"
  17.      InstallPrivileges="elevated" />
  18.  
  19.     <MajorUpgrade DowngradeErrorMessage="Более новая версия [ProductName] уже установлена." />
  20.    
  21.     <!-- Здесь мы указываем настройки для отдельных медианосителей.
  22.    Несколько медианосителей нужно, если установщик большой, и его нужно разделить, например, на диски размером 700 мб.
  23.    Нам же достаточно одного. EmbedCab задает, располагать файлы установки отдельно от программы установки MSI/EXE или внутри -->
  24.     <Media Id="1" Cabinet="cab1.cab" EmbedCab="yes"/>
  25.  
  26.     <!-- Группы компонентов должны располагаться в Feature. Хотя бы один Feature должен быть в проекте. -->
  27.     <Feature Id="ProductFeature" Title="$(var.SolutionName)" Level="1">
  28.       <ComponentGroupRef Id="ProductComponents" />
  29.     </Feature>
  30.  
  31.     <!-- Здесь мы настраиваем, какие наборы диалогов будет выводить установка -->
  32.     <UI Id="WIX_UI">
  33.       <UIRef Id="WixUI_Minimal"/>
  34.       <UIRef Id="WixUI_ErrorProgressText"/>
  35.     </UI>
  36.  
  37.     <!-- Здесь указываем где взять файл лицензии -->
  38.     <WixVariable Id="WixUILicenseRtf" Overridable="yes" Value="License.rtf"/>
  39.   </Product>
  40.  
  41.   <Fragment>
  42.     <!-- Это элемент для настройки структуры папок установки -->
  43.     <Directory Id="TARGETDIR" Name="SourceDir">
  44.       <!-- Этот элемент указывает на то, что установку нужно выполнять в ProgrammData. Тут могут быть и другие варианты:
  45.      https://msdn.microsoft.com/en-us/library/windows/desktop/aa370905(v=vs.85).aspx#system_folder_properties -->
  46.       <Directory Id="CommonAppDataFolder">
  47.         <!-- Внутри ProgrammData получаем/создаем папку Autodesk -->
  48.         <Directory Id="adsk_data" Name="Autodesk">
  49.           <!-- Внутри папки Autodesk получаем/создаем папку ApplicationPlugins -->
  50.           <Directory Id ="adsk_plugins" Name="ApplicationPlugins">
  51.             <!-- Внутри нее создаем папку для нашего Bundle -->
  52.             <Directory Id="INSTALLFOLDER" Name="$(var.SolutionName).bundle" />
  53.           </Directory>
  54.         </Directory>
  55.       </Directory>
  56.     </Directory>
  57.   </Fragment>
  58.  
  59.   <Fragment>
  60.     <!-- Группа компонентов, которая будет устанавливаться в папку с Id INSTALLFOLDER -->
  61.     <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  62.       <!-- Компонент для XML файла Bundle. Есть такая рекомендация, что отдельный
  63.      файл следует располагать в отдельном компоненте. Уже не помню, с чем связанная -->
  64.       <Component Id="ProductComponent">
  65.         <!-- Если KeyPath=true, то только по этому элементу определяется, установлено ли приложение на ПК.
  66.        DiskId=1 указывает, что нужно располагать файл в Media у которого Id=1.
  67.        Name - название файла, Source - путь к файлу (Т.к. он лежит в папке проекта, то для пути указываем только название) -->
  68.         <File Name="PackageContents.xml" Source="PackageContents.xml" DiskId="1" KeyPath="yes" />
  69.       </Component>
  70.       <!-- Компонент для файла DLL -->
  71.       <Component Id="DllComponent">
  72.         <File
  73.          Id="DllFile" Name="$(var.AutoCADTestProject.TargetFileName)"
  74.          Source="$(var.AutoCADTestProject.TargetPath)" DiskId="1" />
  75.       </Component>
  76.       <!-- Далее можно создавать еще компоненты и внутри них описания для файлов -->
  77.     </ComponentGroup>
  78.   </Fragment>
  79. </Wix>

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Свой инсталлятор
« Ответ #20 : 23-09-2016, 06:31:44 »
Если ты захочешь взяться за WIX, то для изучения будут полезны например такие ресурсы:
http://wixtoolset.org/documentation/
http://www.allitebooks.com/wix-3-6/
http://www.allitebooks.com/wix-cookbook/
Ну как бы не очень хотелось браться, Дмитрий уже почти научил, осталось ещё чуть-чуть разобраться.
Нашёл книгу на русском http://wixbook.codeplex.com/
справка, лицензия, установка, открытие в проводнике каталога пакета и т.п.
вот это кстати вообще лишнее по-моему, кто у нас справки\лицензии читает? Я уже для своих приложений видеосправку записал с удобной навигацией, и даю ссылку на неё при всех упоминаниях о приложении, и из самого приложения нажав кнопку "Справка" запускается в браузере это видео, но нет, каждый 3 спрашивает, а как это , а как то, а можно ли так, даже 5-ти минутный ролик посмотреть не могут, а ты им хочешь ещё и лицензию на 27 страниц дать почитать?
И речь об инсталляторе я завел не для крупных мега приложений, а для мелких Lisp'ов, не прям совсем простых, а которые уже с диалогом, с панелькой на ленте, с кнопочкой... Потому что тоже уже достали, к каждой публикации таких приложений даю ссылку на "как установить" и всё спрашивают, а как, а куда, а макрос на кнопку...

Дмитрий Загорулькин, с комментами немного лучше стало, спасибо. Как создать структуру папок я понял. Но куда деть мои файлы для установки, загрузить их как ресурсы в проект? И раздел "DllComponent" мне не нужен, это только для вас Net разработчиков?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Свой инсталлятор
« Ответ #21 : 23-09-2016, 09:01:46 »
Нашёл книгу на русском http://wixbook.codeplex.com/
Спасибо за ссылку, полистаю контент на досуге.

Я уже для своих приложений видеосправку записал с удобной навигацией, и даю ссылку на неё при всех упоминаниях о приложении, и из самого приложения нажав кнопку "Справка" запускается в браузере это видео
Интересное решение. Запомню.

но нет, каждый 3 спрашивает, а как это , а как то, а можно ли так, даже 5-ти минутный ролик посмотреть не могут
Проблема распространённая. В подобных случаях я указываю юзеру конкретный раздел справки и предлагаю обращаться ко мне с конкретными вопросами, сообщая о том, в каком месте в ходе выполнения инструкции у него возникли проблемы. Это вынуждает юзера прочитать справку\инструкцию. Как правило (в 99,9% случаях) это работает.

Время от времени, к сожалению, встречаются и такие, которые "с пеной у рта" начинают настаивать на том, что они "уже 100 раз читали" эти 10-12 строчек инструкции, "но не получается" и и что "не только у них не получается" и что они уже "второй день" безуспешно пытаются решить проблему. На мой вопрос о том, что же они прочитали в инструкции - как это ни странно, ответить при этом не могут (т.к. даже не открывали её). Такое нельзя "спускать на тормозах" (ИМХО). На примере подобных персонажей устраиваю публичную порку:

Вариант 1.

Заставляю при мне последовательно выполнить все пункты указанной им ранее в качестве ответа инструкции. В 100% случаев волшебным образом у них всё вдруг получается. Сообщаю об этом начальнику отдела IT и тот берётся за организацию "публичной порки" (с участием директора) в назидание зрителям, дабы те делали правильные выводы.

Вариант 2.

Но не обходится, к сожалению, и без уродов: Иногда встречаются персонажи, которые отказываются читать инструкцию или указанный им пункт справки. Они начинают кричать, что им "некогда всякую х@рню читать" и что "этим не они должны заниматься, а отдел IT", угрожают пойти жаловаться директору ("ха-ха" три раза). В этом случае я вызываю начальника IT в качестве тяжёлой артиллерии и с его помощью всегда очень быстро удаётся заставить "упёршегося рогами в стену" сесть за клавиатуру и начать при нас пошагово выполнять пункты инструкции, решающей его проблемы (дабы он смог продемонстрировать нам, на каком конкретном шаге он споткнулся и "промучался с этим два дня").

При этом подобные персонажи нередко начинают усердно косить под идиота: мол а что нужно сделать, если написано "запустите AutoCAD" (хотя они за ним работают каждый день)? И при этом вопросительно заглядывают мне в глаза... Или не могут найти левый верхний угол с большой красной буквой "А" главного окна приложения (автокад у них обычный, не вертикалка). Или настойчиво пытается перепрыгнуть через очередной пункт инструкции (ведь ему теперь как-то надо имитировать неудачную попытку, раз уж он перед этим заявлял, что "два дня безуспешно пытаюсь")...  Я не сгущаю краски - это реальные примеры из конкретного случая, причём "дурку лепил" руководитель группы проектирования (т.е. в теории это должен был бы быть не самый тупой сотрудник), который в AutoCAD работает каждый день (ну или почти каждый).

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

Затем я требую указать мне сотрудника который, по словам персонажа, "тоже пробовал, но ничего не получилось". В этом случае у персонажа на 100% напрочь отшибает память, т.к. он "вдруг" не может вспомнить кто это "вчера" был, да и "не вчера, а давно", да и "тот уже уволился"...

Затем начальник IT отдела идёт к директору и жалуется на такого оленя, дабы того отодрали и впредь ему было неповадно вести себя подобным образом. Причём всё это делается так, чтобы все присутствующие видели, дабы у них не возникало желание вести себя подобным образом. Это работает.



а ты им хочешь ещё и лицензию на 27 страниц дать почитать?
Я не знаю, где ты там 27 страниц нашёл.

вот это кстати вообще лишнее по-моему, кто у нас справки\лицензии читает?
Я не настаиваю, это твоё личное дело.
И речь об инсталляторе я завел не для крупных мега приложений, а для мелких Lisp'ов, не прям совсем простых, а которые уже с диалогом, с панелькой на ленте, с кнопочкой...
Для меня это аргумент не убедителен (не вижу никакой связи). Но опять же повторюсь - это твоё личное дело. Не хочешь - не делай. :)

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Свой инсталлятор
« Ответ #22 : 23-09-2016, 11:08:55 »
Но куда деть мои файлы для установки, загрузить их как ресурсы в проект?
Как ресурсы не нужно. Можно вообще не добавлять в проект, просто в поле Source указать полный или относительный путь к файлу. Ну или можно добавить файл в проект, тогда никакого пути указывать не нужно. Только потом нужно будет не забыть его заменить, если он изменится. Как это сделать: http://autode.sk/2cy5Gig. Заранее прошу прощения, что снова без звука.

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Свой инсталлятор
« Ответ #23 : 23-09-2016, 11:50:15 »
Можно вообще не добавлять в проект, просто в поле Source указать полный или относительный путь к файлу. Ну или можно добавить файл в проект, тогда никакого пути указывать не нужно.
Т.е. так для каждого файла, даже если их 43 штуки?
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Свой инсталлятор
« Ответ #24 : 23-09-2016, 11:54:59 »
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?
Чего не знаю, того не знаю. Возможно, что как-то это можно сделать. Я всегда по одному файлу настраивал, но их максимум с десяток набиралось.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Свой инсталлятор
« Ответ #25 : 23-09-2016, 12:03:49 »
Т.е. так для каждого файла, даже если их 43 штуки?
Нельзя сразу каталог со всеми подкаталогами и файлами разом указать?
Насколько я помню - нельзя. WIX оперирует понятиями "компонент", "группа компонентов" и feature ("фича" - х.з. как лучше перевести в данном контексте - это набор групп компонентов, которые ты хочешь установить, устанавливая для них галочки в окне установки). Компонентом, в свою очередь, может быть не только файл но, например, операция создания каталога и т.п. В составе одного компонента может быть определене сразу несколько элементов. Компонент - это минимальная единица, которая может быть инсталлирована, деинсталлирована или пропатчена. В виду этого WIX требует, чтобы каждый файл указывался отдельно. В мануалах, насколько я помню, пишут, что инсталлятор должен писаться (по задумке) параллельно с целевым проектом, добавляя в конфигах инсталлера новые компоненты по мере развития целевого проекта.

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Свой инсталлятор
« Ответ #26 : 27-09-2016, 09:18:29 »
Всем спасибо, всё получилось  :)
Остались мелкие вопросы, по иконкам и картинкам в самом установщики, но это потом если что мануал полистаю.

Возник вопрос с инсталлятором для Lisp в предыдущих версиях AutoCAD не поддерживающих технологию бондул? Очень много динозавров среди пользователей не желающих переходить на новые версии...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Свой инсталлятор
« Ответ #27 : 27-09-2016, 10:39:56 »
Возник вопрос с инсталлятором для Lisp в предыдущих версиях AutoCAD не поддерживающих технологию бондул? Очень много динозавров среди пользователей не желающих переходить на новые версии...
Добавь в инсталлятор регистрацию твоего лиспа в реестре. Хотя... Это может оказаться не так уж и просто, т.к. разные акады и их верт. приложения используют разные ключи реестра. Т.е. тебе в инсталляторе нужно будет узнать, какие акады установлены, дабы знать куда вносить правки...

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Свой инсталлятор
« Ответ #28 : 27-09-2016, 10:42:55 »
Добавь в инсталлятор регистрацию твоего лиспа в реестре.
А ну теперь то всё понятно стало...
Андрей, ты хороший парень, и отзывчивый и специалист в своём деле. Но ты пожалуйста учитывай подписи под аватарками, вот у тебя написано "Программист. Администратор CAD.", но у меня же  "Геодезист"
Я честно даже был смущён немного, когда меня в члены ADN Club записали.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Свой инсталлятор
« Ответ #29 : 27-09-2016, 10:46:31 »
Добавь в инсталлятор регистрацию твоего лиспа в реестре. Хотя... Это может оказаться не так уж и просто, т.к. разные акады и их верт. приложения используют разные ключи реестра. Т.е. тебе в инсталляторе нужно будет узнать, какие акады установлены, дабы знать куда вносить правки...
Вообще-то lisp-файлы не регистрируются в реестре. Этот принцип работает только с arx/dbx/crx/dll. Можно написать arx/dll, которая будет регистрироваться в реестре и в свою очередь загружать lisp-файлы. Фактически автозагрузчик работает именно по такому принципу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение