Автоматическая система обновления/движок

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

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

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

Есть ли подходящие рамки/шаблоны для их архивации?

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

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

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

Ответ 2

Я думаю, что вы можете сами его закодировать. как в приведенном ниже коде:
Для вашего 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, вы должны удалить его из своего кода формы, также для обычного метода вы можете загрузить файл version.txt и update.exe в свою учетную запись и использовать их.
Не стейсняйся спросить.