Функция автоматического обновления в 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