Как автоматически обновить приложение для Windows Mobile - PullRequest
8 голосов
/ 16 апреля 2009

У меня есть приложение .net cf 3.5 для Windows Mobile, которое мой клиент хочет иметь функции автообновления.

Вот что у меня есть:

  1. создать CAB с помощью CAB-проекта Smart Device (это достаточно хорошо, или я должен здесь что-то делать)

2. Получить номер версии приложения

Assembly.GetExecutingAssembly().GetName().Version.ToString();
  1. Позвоните в веб-службу WCF, чтобы узнать номер версии.
  2. Загрузите новую версию файла cab.
  3. ???
  4. Выполнить WCELoad.exe в CAB-файле
  5. Прибыль

Ответы [ 5 ]

11 голосов
/ 23 сентября 2009

Я только что опубликовал WmAutoUpdate, платформу .NET c #, которая будет выполнять автообновления в Compact Framework. Это свободно доступно на Github: http://github.com/seboslaw/wmautoupdate

9 голосов
/ 16 апреля 2009

Ваше решение, как правило, правильное, но имеет несколько проблем.

  1. Вы не можете обновить себя. Вы должны закрыть и попросить обновить приложение, чтобы предотвратить проблему с совместным доступом к файлам. Обычно это выполняется с помощью специального приложения для обновления, которое вы запускаете. Он может быть целью значка приложения и, следовательно, выполнять обновления при каждом запуске, или он может запускаться с помощью пункта меню типа «проверить наличие обновлений». В любом случае, вы должны запустить его и убедиться, что само приложение не запущено.
  2. Как правило, рекомендуется создать некую резервную копию на случай поврежденной, прерванной установки
  3. Обновления CAB потребуют оптовых обновлений всего. В конце концов это может быть не то, что вам нужно (вы можете захотеть обновить только один файл, сборку или что-то еще), поэтому, начав с логики вытягивания отдельных файлов, вы станете более расширяемыми.

Старый, но все еще очень полезный ресурс - статья Алексея Фейнмана MSDN о создании самообновляющихся приложений .

5 голосов
/ 18 августа 2009

Нет необходимости создавать специальное приложение для обновления, по крайней мере, на WM 6 с .netcf 3.5. Я загружаю файл .cab с помощью веб-службы, а затем запускаю новый процесс и запускаю wceload, чтобы выполнить установку без вывода сообщений. Это заботится о закрытии моего работающего приложения, его удалении и последующей установке, как указано в Документы MSDN здесь

В Windows Mobile версии 5.0 и более поздних, при использовании Wceload.exe для переустановки CAB-файла, Wceload.exe удаляет ранее установленную версию CAB-файла перед установкой новой версии. Во время удаления этого процесса Wceload.exe закрывает все запущенные в настоящий момент исполняемые файлы, которые были установлены на целевом устройстве, используя CAB-файл, основываясь на их имени файла. Wceload.exe также закрывает все исполняемые файлы, которые являются целью файловой операции, такой как перемещение или копирование. Чтобы закрыть исполняемый файл, Wceload.exe отправляет WM_CLOSE во все окна верхнего уровня, принадлежащие процессу. Если процесс не завершается своевременно после получения сообщения WM_CLOSE, то Wceload.exe принудительно закрывает его, вызывая TerminateProcess. Wceload.exe не пытается закрыть исполняемые файлы, отправленные в образе времени выполнения на целевом устройстве.

У меня также есть cesetup.dll для дополнительной очистки файлов во время удаления.

Большая проблема, с которой я столкнулся, заключается в том, что я не могу изменить папку установки для моего приложения при автоматической установке, и по умолчанию используется свойство% installDir% из моего файла .inf. И создание отдельного CAB-файла для каждого устройства, которое требуется обновить, - не очень хорошее решение.

2 голосов
/ 16 апреля 2009

Команда, в которой я участвовал, реализовала это путем создания второго мобильного приложения (вне обновляемого приложения) на мобильных устройствах, которое отвечало за загрузку и запуск CAB.

  • На каждой док-станции основное приложение определяло, нужно ли его обновлять с помощью вызова веб-службы.
  • Если его версия устарела, он вызывает приложение для обновления с URI новой версии для установки и затем завершает работу
  • Приложение обновления загрузит новую CAB и выполнит установки / перезагрузки и изменения реестра в зависимости от ситуации.

Это хорошо сработало для нас.

0 голосов
/ 17 марта 2010

Вы правы. после wM5 6 ... WCEload просто останавливает приложение, если оно установлено, поэтому вам не нужно останавливать его вручную. но вам нужно установить обновление в режиме без вывода сообщений, потому что, если нет, пользователь может отменить его, поэтому вам нужен установщик тихой кабины. скачать его с

http://cssoft.freehosting.net/website2/default.html

...