私はあなたが私を助けることを望んでいます。私は、サーバーからXMLファイルをダウンロードすることに基づいてプログラムアップデータを構築しようとしています。VB.net XMLTextReader IO例外:「別のプロセスによって使用されているファイル」
サーバーの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 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>
非同期でダウンロードしています。そして、それがダウンロードを完了するのを待っていない... –
ガー!それは何か愚かであったに違いないと分かっていた。ありがとうトニー! –
また、 'XmlTextReader'を直接使用するべきではありません。代わりに 'XmlReader.Create'を使用してください。 –