Заплатить заявку - PullRequest
       6

Заплатить заявку

10 голосов
/ 10 апреля 2010

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

Ответы [ 6 ]

1 голос
/ 13 апреля 2010

Хорошо, это сообщение помечено мета для ответов, и я собираюсь взвесить это.

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

Существует два способа обновить двоичный образ: заменить его с помощью собственной программы или заменить его с помощью какой-либо формы управления пакетами. Например, системы Linux используют rpm и т. Д. Для отправки обновлений пакетов. В среде Windows ваши возможности ограничены тем, что установлено, если вы не находитесь в корпоративной сети. Если да, попробуйте WSUS и MSI. Это облегчит вам жизнь, или ClickOnce, как кто-то упоминал.

Однако, если вы этого не сделаете, вам нужно помнить следующее:

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

Я не думаю, что для ваших целей xdelta все равно даст вам большую выгоду. Просто замените все изображение.

Редактировать Если пользователь вообще не должен запрашивать, просто перезагрузите приложение. Однако я настоятельно рекомендую информировать пользователя, с которым вы разговариваете в его сети, и попросить разрешения сделать это / включить режим ручного обновления, иначе такие люди, как я, заблокируют его.

1 голос
/ 13 апреля 2010

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

Это называется wyUpdate .

Хотя клиент обновления (wyUpdate) имеет открытый исходный код, для сборки и публикации исправлений используется платный инструмент wybuild .

1 голос
/ 11 апреля 2010

Я бы не стал использовать патч-решение, поскольку оно действительно усложняет ситуацию, когда у вас много ревизий. Как решение по исправлению будет обрабатывать разные версии, требующие обновления? Что если у пользователя А есть 10 ревизий позади текущей ревизии? Или 100 ревизий и т.д? Вероятно, было бы лучше всего просто загрузить последние exe (s) и dll (s) и заменить их.

Тем не менее, я думаю этот ТАК вопрос о тихих обновлениях может помочь вам.

1 голос
/ 11 апреля 2010

Что это за приложение? Возможно, вы могли бы использовать clickonce для развертывания своего приложения. Clickonce очень легко позволяет загружать обновления для ваших пользователей.

Коротко говоря, Clickonce создает установку, которая позволяет вашим пользователям устанавливать приложение с веб-сервера или из общей папки, вы включаете автоматическое обновление, и всякий раз, когда вы размещаете новую версию приложения на сервере, приложение автоматически (или попросить пользователя) обновить приложение. Инфраструктура clickonce позаботится обо всем остальном - загрузит обновление, выяснит, какие файлы изменились и должны быть загружены снова, и выполнит обновление. Вы также можете проверить / выполнить обновление программно .

Тем не менее, clickonce оставляет вас практически без контроля над самой процедурой установки, и вы не имеете ничего общего со свободой создания своих собственных .msi.

0 голосов
/ 11 апреля 2010

В зависимости от размера вашего приложения, вы, вероятно, разделите его на несколько dll, exe и других файлов.

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

Если ваше приложение маленькое (скажем, один exe-файл), достаточно просто заменить программу обновления на этот exe-файл.


Edit:

Другим способом сделать это было бы (после компиляции нового exe) сравнить новый со старым и просто отправить различия в программу обновления. Затем он внесет соответствующие корректировки.

0 голосов
/ 11 апреля 2010

Вы можете разместить свою функцию в отдельной DLL. Таким образом, вы можете просто заменить DLL, а не исправлять всю программу. (Предполагая, что Windows является целевой платформой для программы на C #.)

...