Зафиксировать приложение

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Это говорит о том, что этот SO-вопрос для тихих обновлений может вам помочь.

Ответ 4

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

Он называется wyUpdate.

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

Ответ 5

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

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

Если ваше приложение мало (скажем, один exe), достаточно просто заменить установщик на один exe.


Edit:

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

Ответ 6

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