Создание установщика Windows с использованием C# Winforms вместо инструмента установщика

Ранее я использовал InstallAware и InstallShield, и с ними довольно сложно работать, а когда что-то идет не так, очень трудно найти и решить проблему.

У меня вопрос, почему мы не можем использовать для этого приложение Windows, написанное на C#. Я понимаю, что.Net Framework не может быть установлен на конечном компьютере, поэтому мне интересно, почему никто никогда не использовал эту архитектуру: я создам простой установщик, использующий IntallSiheld(или любой другой подобный инструмент), чтобы просто установить.Net Framework и после который извлекает и запускает мое собственное приложение Windows, которое я написал с использованием C# в повышенном режиме. Мое приложение запустит мастер с кнопками "Назад" и "Далее", и я позабочусь обо всем в нем (копирование файлов, создание и запуск служб Windows, добавление значений реестра, создание расширений брандмауэра и т. Д.) Кто-нибудь когда-либо делал это, и есть ли что-нибудь что мешает людям делать это?

1 ответ

Решение

По сути: не пытайтесь заново изобрести колесо. Используйте существующий инструмент развертывания и оставайтесь на работе:-). Есть много таких инструментов, доступных. Смотрите ссылки ниже.

И ниже, продолжительные, повторяющиеся размышления:


Redux: ИМХО, и при всем моем уважении, если можно так выразиться, создание собственного установщика программного обеспечения заново изобретает колесо, абсолютно без выгоды, чего бы я ни боялся. Я полагаю, что вы "заново откроете" сложности, обнаруженные другими, кто прошел путь, который связан с развертыванием, когда вы создадите свое собственное программное обеспечение для установки, и обнаружите, что программное обеспечение может быть быстрым, но очень сложным для совершенствования. В процессе вы будете тратить много усилий, пытаясь обернуть вещи - и " последний метр очень длинный ", когда вы проклинаете себя, имея дело с мелочами, которые занимают ваше время за счет того, что в противном случае оплатило бы счета. Разбор ошибок в любом наборе инструментов по любой технической функции может занять годы или даже десятилетия. И нет, я не придумываю это. Это то, с чем имеют дело все поставщики программного обеспечения для развертывания.

Множество существующих инструментов: есть много существующих инструментов, которые уже реализуют такие функциональные возможности развертывания, которые не основаны на установщике Windows (Inno Setup, NSIS, DeployMaster и куча других менее известных усилий):

Мои 2 цента - если вам не нравится MSI, выберите один из бесплатных инструментов для развертывания без MSI. Как создать Windows Installer.

Корпоративное развертывание: действительно важный момент (для меня) заключается в том, что корпоративное развертывание опирается на стандартизированные форматы пакетов - такие как MSI- для обеспечения надежного удаленного управления развертыванием вашего программного обеспечения. Создание собственного установщика не произведет впечатления на системных администраторов или специалистов по корпоративному развертыванию (по крайней мере, пока вы не разберетесь с годами ошибок и недостатков). Им нужен стандартизированный формат, который они умеют обрабатывать (это не означает, что они впечатлены существующей технологией развертывания). Выполнение развертывания с использованием стандартных форматов развертывания может получить корпоративное одобрение вашего программного обеспечения. Если вы делаете странный формат развертывания, который делает необычные вещи при установке, которые не могут быть легко захвачены и развернуты в больших масштабах, ваше программное обеспечение будет первым в любой крупной корпорации. Нет пощады - по-настоящему. Это напряженная обстановка, и вы столкнетесь с небольшим пониманием вашего необычного решения.

"Файловые толкатели". Те из нас, кто ищет файлы для жизни, знают, что область развертывания полна глупых проблем, которые быстро убивают вашу продуктивность в других начинаниях - тех, которые заставляют вас выделиться на своем поле - в вашей повседневной работе., Развертывание - это громкое дело, низкий статус, и мы не жалуемся. Это именно то, что есть: необходимость, с которой труднее справиться, чем вы думаете. Просто трать свое время более мудро, это то, что я бы сделал вывод.

Сложность: Возможно, просмотрите раздел " Сложность развертывания " здесь: установщик Windows и создание WiX. Удивительно иметь дело со всеми глупыми ошибками, возникающими при развертывании. Это не просто копия файла, хотя это может быть легко подумать. И если это просто копия файла, то существуют инструменты, которые делают эту работу. Бесплатные тоже. Смотрите ссылки выше. И если вы думаете, что развертывание - это всего лишь копирование файлов, то, пожалуйста, просмотрите этот список задач, которые должна поддерживать задача развертывания: В чем выгода и реальная цель установки программы?

Будет ли ваша домашняя упаковка справиться со следующим? (просто несколько случайных мыслей)

  • Зараженный вредоносным ПО компьютер сервера терминалов в Корее с символами Юникода в пути?
  • Символические ссылки и пути точек соединения NTFS?
  • Ноутбук, который отключается в середине вашей копии файла, потому что он разряжен?
  • Вне места на диске? Как насчет ошибок на диске? И копировать таймауты?
  • Как насчет требований перезагрузки? Для использования файлов или по какой-либо другой причине. Как они должны быть обработаны? Что если система находится в состоянии ожидания перезагрузки, и вам необходимо ее обнаружить, прежде чем начинать установку?
  • Как вы будете надежно устанавливать, настраивать, запускать и останавливать службы?
  • Как вы будете поддерживать удаление и очистку вашего приложения?
  • Программное обеспечение для обеспечения безопасности, которое помечает ваш неизвестный, нераспознанный, нестандартный пакет как угрозу безопасности и помещает его в карантин? Как бы вы начали заниматься этим? С кем вы связываетесь, чтобы получить доброту "признанного бинарника" для повышения?
  • Нестандартные разрешения NTFS (ACL) и привилегии NT? Как вы обнаруживаете это и грациозно деградируете, когда получаете отказ в разрешении? (для любой причины).
  • Развертывание необходимых сред выполнения для вашего приложения для работы? (было сделано многими другими раньше). Загрузить последние версии, если ваши встроенные устарели? Так далее...
  • Предоставить стандартизированный способ извлечения файлов из установочного бинарного файла?
  • Предоставить помощь и поддержку вашим установочным двоичным файлам для пользователей, которые пытаются их использовать?
  • И т.д... Это был просто случайный список всего, что быстро пришло в голову. Там явно много вопросов.

Это было слишком для того, что вы просили, но не обманывайте себя, думая, что развертывание - это то, за что вы можете найти решение за несколько часов. И определенно не берите на себя работу, обещающую это сделать - если вас об этом просят. Просто мои два цента.

Перечисленные выше проблемы и многие другие - это то, с чем люди сталкиваются при создании программного обеспечения для развертывания - для всех, кроме самых простых развертываний. Не тратьте свое время - используйте какой-то признанный инструмент.

Транзакция: Если вы работаете в корпорации и вам просто нужны ваши файлы для тестировщиков, вы можете развернуть их с помощью пакетных файлов - если хотите. Но вы должны поддержать это, и я гарантирую вам, что это займет много вашего времени. Что вы делаете, когда пакетный файл потерпел неудачу на полпути из-за сетевой ошибки, и ваши тестеры проверяют файлы, которые не соответствуют друг другу? Технологии будущего развертывания могут быть лучше для таких легких задач. Возможно, самая большая особенность инструмента развертывания состоит в том, чтобы сообщать, успешно ли завершено развертывание, и регистрировать ошибки и возвращать машину в стабильное состояние, если что-то не удалось. Установщик Windows делает большую часть этой работы за вас.

Распространение. Многие люди считают, что они могут " просто скопировать мою папку сборки на компьютеры пользователей ". Сложностей здесь много. Вовлечена сеть, и сеть никогда не может считаться надежной, вам нужно много обработки ошибок здесь. Тогда возникает проблема транзакций: когда вы знаете, когда компьютер находится в стабильном состоянии и должен прекратить репликацию. Как часто вы копируете, только по требованию? Как вы справляетесь с несколькими компьютерами, которые не удалось воспроизвести. Как вы говорите пользователям? Это проблемы распространения. Корпорации имеют огромные инструменты, такие как SCCM, чтобы справиться со всеми этими ошибочными условиями. Попытка повторно реализовать все эти проверки, ведение журнала и функций займет много времени. В конце концов вы заново создадите существующую систему распространения. Полный круг. И как вы проводите инвентаризацию своих компьютеров, если не зарегистрировано ни одного продукта, установленного в качестве установленного, поскольку выполнялся только пакетный файл или сценарий? И если вы начнете реплицировать много пакетов, сколько раз вы сканируете каждый файл, чтобы определить, не устарели ли они? Какой объем сетевого трафика вы хотите создать? Где это заканчивается? Ответ: я предполагаю, что транзакции должны быть реализованы с полной регистрацией и отслеживанием ошибок и откатом. Тогда вы пройдете полный путь к системе распространения, как я уже упоминал выше, а также к поддерживаемому формату пакета.

Эти идеи " просто скопировать мою папку сборки для моих пользователей " как-то напоминают мне этот список: https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing. Не 100% совпадение, но проблемы напоминают. Когда речь идет о сетевом взаимодействии, все начинает становиться очень непредсказуемым, и вам нужны регистрация, контроль ошибок, транзакции, откат, сетевое взаимодействие и т. Д. Мы вновь обнаружили крупномасштабное развертывание - чудовище, которым оно является.

Сеть: и скажем, вы хотите скопировать папку сборки на 10000 настольных компьютеров вашего предприятия. Как вы запускаете репликацию? Вы запускаете все репликации сразу и закрываете торговую площадку банка, поскольку репликация файлов охватывает всю сеть, как атака DDOS? Извините - это выходит из-под контроля - прошу прощения за легкомысленность - но это действительно огорчает, что этот подход репликации считается жизнеспособным для крупномасштабного развертывания. Встроенные функции Windows могут помочь, но все еще должны быть проверены должным образом. Тебе нужно scheduling, queuing, caching, regional distribution shares, logging, reporting / inventory и Бог знает, что еще дает вам система упаковки / развертывания. И его повторное внедрение будет болезненным ходом новых ошибок, с которыми придется иметь дело.

Возможно, однажды мы увидим автоматическую репликацию выходных папок на основе автоматической генерации пакетов, которая действительно работает через интеллектуальную и транзакционную систему распространения. Многие корпоративные команды пытаются, и с помощью существующих инструментов они становятся ближе к используемым стандартным форматам пакетов. Я думаю, что современные системы облачного развертывания движутся в этом направлении с онлайн-хранилищами и простой, интерактивной установкой, но нам все еще нужно разумно упаковывать наше программное обеспечение. Будет интересно посмотреть, что нас ждет в будущем и какие новые проблемы возникают при упаковке и распространении в эпоху облаков.

Когда мы извлекаем файлы напрямую из онлайн-хранилищ по требованию, мы увидим кучу новых проблем? Вредоносные программы, подмена и инъекция? (уже проблематично, но может ухудшиться). Удаленные файлы удаляются без предупреждения (чтобы избавиться от уязвимых выпусков, которые больше не должны использоваться - оставляя пользователей в затруднительном положении)? Проблемы с сертификатом и подписью? Проблемы с брандмауэрами и прокси? Обновления авто-магии с неудачными ошибками, поражающими всех сразу и неожиданно? И ошибки сети и другие факторы, как указано выше. Бьет меня Посмотрим.

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

Твиттер Стефана Крюгера Installsite.org: https://twitter.com/installsite

Некоторые последние моменты:


Выбор инструмента развертывания:

Другие вопросы по тегам