我希望你能帮助我。我正在尝试构建一个基于从服务器下载 XML 文件的程序更新程序。
想法是服务器 XML 文件包含当前版本号和安装程序位置。更新程序要么被转储到启动文件夹中,要么被安装为服务等。
程序成功读取并解析了当前版本的 xml 文件,并成功地从服务器下载了 xml 文件。但是,当我尝试从服务器解析新下载的文件时,出现错误:
'IOException 未处理' '进程无法访问文件'C:\Program Files (x86)\Test\ServerVersion.xml',因为它正被另一个进程使用。'
据我所知,在程序之外和程序内部情况并非如此,我认为我已经处理了在使用之前可以访问它的任何元素。我是否做了一些愚蠢的事情或没有正确处理事情?
代码如下,错误由第 52 行的注释标记:
Imports System.IO
Imports System.Xml.XmlTextReader
Imports System.Net
Module Module1
Sub Main()
Dim currentreader As Xml.XmlTextReader
Dim serverreader As Xml.XmlTextReader
Dim download As New WebClient
Dim Version
Dim Versionlocation
Dim ServerVersion
Dim Serverlocation
Dim Failure As Boolean = False ' Will be used for retrys in the future'
download = New WebClient
Try
If Not (System.IO.File.Exists("C:\Program Files (x86)\Test\ServerVersion")) Then
download.DownloadFileAsync(New Uri("http://192.168.2.226/SampleApp_ServerSetup/UpdateVersion.xml"), "C:\Program Files (x86)\Test\ServerVersion.xml")
download.Dispose()
End If
Catch ex As Exception
Failure = True
Console.WriteLine("error" & ex.Message)
End Try
currentreader = New Xml.XmlTextReader("C:\Program Files (x86)\Test\Version.xml")
currentreader.WhitespaceHandling = Xml.WhitespaceHandling.None
currentreader.Read()
currentreader.Read()
While Not currentreader.EOF
currentreader.Read()
If Not currentreader.IsStartElement Then
Exit While
End If
Version = currentreader.ReadElementString("AvailableVersion")
Versionlocation = currentreader.ReadElementString("ApplicationUrl")
End While
currentreader.Close()
serverreader = New Xml.XmlTextReader("C:\Program Files (x86)\Test\ServerVersion.xml")
serverreader.WhitespaceHandling = Xml.WhitespaceHandling.None
Console.WriteLine("Current Version: " & Version & vbNewLine & "Version Url: " & Versionlocation)
'error here'
serverreader.Read()
serverreader.Read()
While Not serverreader.EOF
serverreader.Read()
If Not serverreader.IsStartElement Then
Exit While
End If
ServerVersion = currentreader.ReadElementString("AvailableVersion")
Serverlocation = currentreader.ReadElementString("ApplicationUrl")
End While
If ServerVersion > Version Then
Console.WriteLine("New version available : " & ServerVersion)
End If
serverreader.Close()
End Sub
End Module
它仍在进行中,但是如果我无法确定新版本的位置,那么编写代码来下载和执行安装程序就没有多大意义了。
如果在这里使用它是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<VersionConfig>
<AvailableVersion>2.0.0.0</AvailableVersion>
<ApplicationUrl>http://192.168.2.226/EPI/2.0.0.0/</ApplicationUrl>
</VersionConfig>