Как лучше всего обновить установку MSI через Интернет?

Как лучше всего обновить установку MSI через Интернет?

ClickOnce не поддерживает MSI.

Мне нужно, чтобы обновление происходило автоматически через Интернет, так же, как и обновления Windows.

В идеале я бы хотел, чтобы мое приложение автоматически обнаруживало наличие обновления, загружало и устанавливало его.

Ответы должны касаться только установок MSI. Я не возражаю, если потребуется установить службу Windows для отслеживания обновлений.


person CJ7    schedule 07.02.2012    source источник
comment
Мне любопытно, вы когда-нибудь реализовывали это?   -  person Christopher Painter    schedule 09.05.2014


Ответы (5)


Вот что я недавно сделал для покупателя:

Пользовательский интерфейс работает от имени вошедшего в систему пользователя.

Служба работает как System. Служба проверяет содержимое и загружает его во временный каталог. Затем он объявляет MSI с помощью команды / JM. Теперь установщик может быть установлен непривилегированным пользователем.

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

В конце установщика флаг заставляет установщик перезапустить приложение.

Также взгляните на библиотеку wuw4. Это очень помогает в создании этого решения.

Это сложный шаблон, но он работает очень хорошо. У меня есть компания, которая может помочь вам в этом решении. :)

person Christopher Painter    schedule 14.02.2012
comment
Несколько вопросов: нужна ли услуга? Разве приложение не могло просто проверять наличие обновлений при запуске? К какой временной папке будет иметь доступ Сервис? - person CJ7; 15.02.2012
comment
Из соображений безопасности и того, как работает установщик Windows, лучше всего иметь процесс с повышенными привилегиями, который может создать временный каталог, в котором непривилегированный пользователь имеет только доступ для чтения, и рекламировать установку оттуда. После этого процесс конечного пользователя, не имеющего привилегий, может запустить установку, и она будет работать. Если непривилегированный пользователь проверяет наличие обновлений при запуске, это создает проблемы с подъемом в будущем. - person Christopher Painter; 15.02.2012
comment
Если приложение очень легкое и не требует прав администратора для установки, вы можете рассмотреть вариант ClickOnce. Но если это установка на уровне машины, которую необходимо будет обновить любому пользователю, не имеющему привилегий, то этот шаблон с MSI - то, что вам нужно. - person Christopher Painter; 15.02.2012
comment
Проблема в том, что это приложение VB6, использующее компоненты .NET, что затрудняет использование ClickOnce. Мне также нравятся такие функции MSI, как самовосстановление. - person CJ7; 15.02.2012
comment
Кроме того, будет ли Служба вызывать нежелательные запросы на повышение прав, как предлагается в этом ответе? stackoverflow.com/a/7396926/327528 - person CJ7; 15.02.2012
comment
Я предполагаю, что это видимые компоненты COM. Вы можете использовать COM-манифесты RegFree, чтобы сделать их видимыми для приложения VB6 без записи в реестр. Кроме того, если вы выберете Google для vb6 clickonce, вы увидите несколько статей, в которых обсуждается упаковка устаревших незатронутых приложений с помощью clickonce. Не поймите меня неправильно, я поклонник MSI, а не ClickOnce, но если ваше приложение достаточно мало для работы ClickOnce, оно в основном даст вам самовосстановление и автоматическое обновление за гораздо меньшую работу. Самовосстановление отличается тем, что файлы манифеста VSTO будут искать файлы в кэше clickonce и DL при необходимости. - person Christopher Painter; 15.02.2012
comment
Нет, поскольку служба уже имеет повышенные права и объявляет об установке (благословляя ее как управляемую установку, если хотите), пользователь перейдет от пользовательского интерфейса к последовательности «Выполнить» без какого-либо запроса UAC. - person Christopher Painter; 15.02.2012
comment
И как с точки зрения осуществимости в эту картину вписывается сервис обновлений Installshield? - person CJ7; 15.02.2012
comment
Это похоже. Они предоставляют стандартный агент обновлений и внутреннюю службу (серверы) вместе с подробными отчетами об использовании данных пользователями. Из ваших исходных вопросов и тегов не было ясно, используете ли вы InstallShield или что-то еще для создания своего MSI. ЕСЛИ вы используете InstallShield, возможно, вы захотите спросить Майкла Урмана, указанного выше, поскольку он является разработчиком в команде IS. - person Christopher Painter; 15.02.2012
comment
Что ж, я использовал IS для создания MSI, потому что мне нужно было автоматически определять зависимости. Я также не знаю, где бы я взял все необходимые распространяемые файлы / модули без IS. Я бы предпочел не платить Flexera больше денег, поэтому с радостью создам службу обновлений самостоятельно. Если это просто реклама MSI, то это звучит выполнимо. - person CJ7; 15.02.2012
comment
Где я могу узнать об этой концепции «рекламы» инсталляции? Если установка объявляется, будет ли установлена ​​новая версия при двойном щелчке по значку приложения в режиме самовосстановления? - person CJ7; 20.02.2012
comment
comment
Просто хотел сказать, что это отлично работает. Удалось реализовать без библиотеки wuw4. Спасибо, Кристофер! - person Edgar; 29.03.2016
comment
Привет, Кристофер, Не могли бы вы пояснить пример кода. У меня та же проблема, и я хочу ее исправить - person yo2011; 17.05.2016
comment
любой ответ Кристофер - person yo2011; 18.05.2016

Вы можете использовать утилиту msiexec. Здесь вы можете найди пример.

person Ciprian    schedule 08.02.2012
comment
Мне нужно, чтобы обновление доставлялось автоматически через Интернет. - person CJ7; 09.02.2012

Установщик Windows не поддерживает автоматические обновления и не выполняет их доставку. Компания, в которой я работаю, продает продукт, ориентированный на обновления и многое другое.

person Michael Urman    schedule 14.02.2012

Вот что я обычно делал (это просто концепция того, как я обновляю свою программу):

  • Используйте Advanced Installer или любую другую MSI installer/packer поддержку Command Line для упаковки файлов вашей обновленной программы. Вам необходимо правильно установить параметры и протестировать их, прежде чем переходить к следующему шагу.

  • Перейдите в Visual Studio -> выберите свой проект, затем -> свойства -> События сборки.

  • В текстовом поле «Post-Build event command line» введите параметры командной строки, которые вы создали ранее, затем нажмите «ОК».

  • Теперь, когда вы создаете свой проект, Visual Studio автоматически упаковывает ваши файлы с помощью установщика / упаковщика MSI.

  • Последний шаг - поискать FTP Client также из командной строки.

  • Установите правильные параметры и добавьте его в «Событие после сборки» после предыдущего.

  • Теперь, если вы снова создадите свой проект с помощью Visual Studio. Ваши файлы будут автоматически упакованы и загружены на ваш сервер.

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

РЕДАКТИРОВАТЬ: еще одна вещь: вы также можете добавить простую процедуру для поиска новых обновлений на сервере внутри вашей программы. что-то вроде проверки хэша MD5 файлов или версий файлов и т. д., как только процедура находит новое обновление, она должна предложить это пользователю, а затем вы можете сказать пользователю загрузить последнее обновление и т. д.

person SolidSnake    schedule 17.02.2012
comment
Извините, я не хотел автоматически отправлять пакет на сервер. Я имею в виду, что пользователь получит автоматическое обновление товара. - person CJ7; 20.02.2012
comment
да, и вы должны сначала обновить свои файлы на сервере ... затем прочитайте часть редактирования. вам следует создать процедуру проверки обновлений, чтобы проверять наличие новых версий на сервере .... - person SolidSnake; 20.02.2012

Вы проверяли виртуализацию приложений? http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/virtualization/default.aspx

Это отличный способ передавать ваши исполняемые файлы / msi клиентам, при этом всегда обеспечивая запуск последней версии msi.

person whihathac    schedule 17.02.2012
comment
Вы можете объяснить, что это такое? Я пробовал читать этот сайт, но ничего не понимаю. - person CJ7; 20.02.2012
comment
Можете ли вы взглянуть на это - blog.augustoalvarez.com.ar/2012/01/31/ - person whihathac; 20.02.2012