2014-09-05 2 views
10

Я разрабатываю клиентское приложение (.NET), которое должно автоматически обновляться автоматически. Приложение будет развернуто с помощью простого установщика WiX/MSI.Автоматическая структура обновления/двигатель

Что мне нужно, это:

  • Проверить сервер для версий файлов/хэш/даты
  • Скачать новые файлы
  • обновлять файлы & перезапуска приложения.

Есть ли подходящие Рамки/Шаблоны, чтобы архивировать это?

Я нашел/попробовал следующее:

  • ClickOnce (не соответствует нашим потребностям, как это не в состоянии установить машину приложения ширину в первом члене)
  • wyUpdate, кажется, быть прекращен
  • ClickThrought, кажется, прекращено
  • Google Омаха выглядит сложным для того, что я пытаюсь достичь.

Есть ли активные разработанные и надежные решения для этого (им не нужно быть свободным или OpenSource)?

+0

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

+0

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

+0

Почему вы говорите, что щелчок по экрану прекращен? Даже если бы это было так, это хорошая отправная точка, особенно в среде Wix: https://github.com/wixtoolset/wix4/tree/develop/src/tools/ct –

ответ

2

Может быть полезно следующее:

https://autoupdaterdotnet.codeplex.com/

Или вы можете дать что попробовать:

https://github.com/synhershko/NAppUpdate

По крайней мере, эти два кажутся активными и простой в использовании.

+0

Оба не кажутся очень надежными. Я уже наткнулся на autoupdateerdotnet, но загрузки и даты не убеждают меня. Хотя я посмотрю на NAppUpdate – Console

0

Я думаю, что вы можете запрограммировать его самостоятельно. как в коде ниже:
Для вашего Form используйте код ниже:

Imports System.Net 

Public Class frmMain 
    Private WithEvents WebC As New WebClient 
    Private updatefilename As String 
    Private WithEvents updateTimer As New Timer With {.Enabled = True, .Interval = 300000} '300000 is 5 min 

    Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     CheckUpdatePHP() ' you can use the php method or the normal method 
    End Sub 

    Private Sub CheckUpdatePHP() Handles updateTimer.Tick 
     Dim ServerVer As String = WebC.DownloadString("http://yourdomainname.com/update.php?get=ver") 
     If Not Application.ProductVersion.Equals(ServerVer) Then 
      Dim updateURL As String = WebC.DownloadString("http://yourdomainname.com/update.php?get=url") 
      updatefilename = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".exe" 
      WebC.DownloadFileAsync(New Uri(updateURL), updatefilename) 
     End If 
    End Sub 

    Private Sub CheckUpdate() 'Handles updateTimer.Tick 
     Dim ServerInfo As String = WebC.DownloadString("http://yourdomainname.com/version.txt") 
     Dim Infos As String() = ServerInfo.Split("%split%") 
     If Not Application.ProductVersion.Equals(Infos(0)) Then 
      Dim updateURL As String = WebC.DownloadString(Infos(1)) 
      updatefilename = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".exe" 
      WebC.DownloadFileAsync(New Uri(updateURL), updatefilename) 
     End If 
    End Sub 

    Private Sub WebC_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles WebC.DownloadFileCompleted 
     Dim pinfo As New ProcessStartInfo(updatefilename) 
     pinfo.WindowStyle = ProcessWindowStyle.Hidden 
     pinfo.CreateNoWindow = True 
     Process.Start(pinfo) 
     End 
    End Sub 
End Class 

version.txt должен выглядеть следующим образом:

1.0.0.0%split%http://yourdomainname.com/update.exe 

upload.php, если вы будете использовать метод PHP, следует использовать этот код:

<?php 
    if(isset($_GET['get'])){ 
     $get = $_GET['get']; 
     $txt = file_GET_contents("version.txt"); 
     $info = explode("%split%",$txt); 
     if($get = 'ver'){ 
      echo $info[0]; 
     }elseif($get = 'url'){ 
      echo $info[1]; 
     } 
    } 
?> 

Если вы будете использовать PHP method вы Shoul d удаляем его из вашего кода формы, также для обычного метода вы можете загрузить файл version.txt и update.exe в свою учетную запись Dropbox и использовать их.
Не стесняйтесь спрашивать.

+0

Спасибо за это, я знаю, что само обновление является основной задачей, но я думаю, что в деталях много ошибок (обработка/обработка ошибок/проверка подлинности). – Console

+0

вы можете добавить эти функции простым кодированием. – user3980820

Смежные вопросы