0

このコードは、 http: //tech.reboot.pro/showthread.php?tid=2982のGemsterから入手しました。できるだけ早く実行する必要があるので、システムに接続するものを探しました。そこで、コピーして貼り付けました。しかし、私は何が起こっているのか理解しています。唯一の問題は、重要なコードのセクションをスキップし、その理由がわからないことです。だからここにあります。

 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

なぜ何かアイデアはありますか?前もって感謝します。

4

1 に答える 1

1

おそらく正規表現が正しくないため、一致は空です。

html を正規表現で解析しようとするのではなく、xml ファイルを使用することをお勧めします。

サーバー上の 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
于 2012-12-14T07:51:47.570 に答える