自动更新框架/引擎

时间:2014-09-05 10:34:27

标签: .net deployment auto-update

我正在开发一个应该能够自动更新的客户端应用程序(.NET)。 该应用程序将使用Simple WiX / MSI安装程序进行部署。

我需要的是:

  • 检查服务器的文件版本/哈希/日期
  • 下载较新的文件
  • 更新文件&重新启动应用程序。

有没有合适的框架/模式来存档?

我发现/尝试了以下内容:

  • ClickOnce(不符合我们的需求,因为它无法在第一学期安装应用程序机器)
  • wyUpdate似乎已停止
  • ClickThrought似乎已停止
  • 谷歌奥马哈看起来很复杂,因为我试图实现这一目标。

是否有任何积极的开发和可靠的解决方案(它们不需要是免费的也不是OpenSource)?

2 个答案:

答案 0 :(得分:2)

以下可能有用:

https://autoupdaterdotnet.codeplex.com/

或者你可以尝试一下:

https://github.com/synhershko/NAppUpdate

至少这两个看起来活跃且易于使用。

答案 1 :(得分: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,则应该从表单代码中删除它,同样对于常规方法,您可以将version.txt文件和update.exe上传到您的保管箱帐户,使用它们。
随意问。