Функция автоматического обновления в Vb.net

Хорошо, я получил этот код от Gemster с http://tech.reboot.pro/showthread.php?tid=2982. Поэтому я просто искал что-то, что можно подключить к моей системе, поскольку это нужно сделать как можно скорее. Поэтому я скопировал и вставил. Тем не менее, я понимаю, что происходит. Единственная проблема в том, что он пропускает часть важного кода, и я не могу понять, почему. Так и здесь.

 Dim CurrentVersion As String = My.Application.Info.Version.ToString '--- Change this to Current version, needs changing on every update
    Dim ProgramName As String = My.Application.Info.AssemblyName '--- Change this to Your Program Name
    Dim SiteName As String = "http://somewebsite.com/UpdateVersion.html" '--- Change this to Your Update page
    Dim VersionCHK As String = ""
    Dim GetVer As String = ""
    Dim GetVerLink As String = ""
    Dim GetUpd As Integer

    'Web Request
    Dim WebRequest As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(SiteName)
    Dim WebResponse As System.Net.HttpWebResponse = WebRequest.GetResponse
    Dim STR As System.IO.StreamReader = New System.IO.StreamReader(WebResponse.GetResponseStream())
    Dim ReadSource As String = Str.ReadToEnd
    Dim Regex As New System.Text.RegularExpressions.Regex(ProgramName & "=(\d+).(\d+)=(.*?).zip")
    Dim matches As MatchCollection = Regex.Matches(ReadSource)

Это та часть, в которой пропускается строка разделения для каждого оператора

    'Split String
    For Each match As Match In matches
        Dim RegSplit() As String = Split(Match.ToString, "=")
        GetVer = RegSplit(1)
        GetVerLink = RegSplit(2)
    Next

Это где он поднимает назад.

    'Check Verison
    If GetVer > CurrentVersion Then
        GetUpd = MsgBox(ProgramName & " is an old version." & vbCrLf & "New Update is available" & _
        vbCrLf & "Current version: " & CurrentVersion & vbCrLf & "Version Avalible: " & _
        GetVer & vbCrLf & vbCrLf & "Update Now?", vbYesNo, "Update")

        If GetUpd = vbYes Then
            Dim sfd As New SaveFileDialog
            sfd.FileName = IO.Path.GetFileName(GetVerLink)
            If sfd.ShowDialog = DialogResult.OK Then
                My.Computer.Network.DownloadFile(GetVerLink, sfd.FileName)
            End If
        End If
    Else
        MsgBox(ProgramName & " is upto date." & vbCrLf & "Current version: " & CurrentVersion, 0, "Update")
    End If
    Return vbNull

Есть идеи почему? Заранее спасибо.

1 ответ

Скорее всего, регулярное выражение неверно, поэтому совпадения пустые.

Я бы предложил использовать XML-файл, а не пытаться анализировать HTML с помощью регулярных выражений:

XML на вашем сервере:

            <VersionHistory>
                <CurrentVersion>
                    <VersionNumber>
                        1.0.0.2
                    </VersionNumber>
                    <DownloadLink>
                        http://www.mysite.com/downloads/myapp_1.0.0.2.zip
                    </DownloadLink>
                </CurrentVersion>
                <LegacyVersions>
                    <VersionNumber>
                        1.0.0.1
                    </VersionNumber>
                    <DownloadLink>
                        http://www.mysite.com/downloads/myapp_1.0.0.1.zip
                    </DownloadLink>
                </LegacyVersions>
            </VersionHistory>

Код:

    Dim localVersion As String = My.Application.Info.Version.ToString
    Dim wc As New Net.WebClient
    wc.Proxy = Nothing

    Dim source As String = String.Empty

    Try
        source = wc.DownloadString("http://www.mysite.com/versions.xml")
    Catch ex As Net.WebException
        'handle accordingly
    End Try

    Dim xm As New Xml.XmlDocument
    xm.LoadXml(source)

    Dim currentVersion As String = xm.SelectSingleNode("//CurrentVersion").ChildNodes(0).InnerText.Trim
    Dim currentLink As String = xm.SelectSingleNode("//CurrentVersion").ChildNodes(1).InnerText.Trim

    If localVersion = currentVersion Then
        MessageBox.Show("Up to Date")
    Else
        'run update routine, use currentLink to download latest version
    End If
Другие вопросы по тегам