あなたが私を助けてくれることを願っています。サーバーからの XML ファイルのダウンロードに基づいたプログラム アップデーターを構築しようとしています。
サーバーの XML ファイルには、現在のバージョン番号とインストーラーの場所が含まれているという考えです。アップデーターは、スタートアップ フォルダーにダンプされるか、サービスとしてインストールされます。
プログラムは、現在のバージョンの xml ファイルを正常に読み取って解析し、サーバーから xml ファイルを正常にダウンロードします。ただし、サーバーから新しくダウンロードしたファイルを解析しようとすると、エラーが発生します。
'IOException was unhandled' '別のプロセスで使用されているため、プロセスはファイル '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>