これは、winforms vb.net アプリケーションです。いくつかの制限があるため、VS で利用可能な組み込みの clickOnce 更新を使用できません。したがって、アプリケーションの更新を処理するために、更新アプリを作成しました。電子メールの添付ファイルをダウンロードして処理します。アプリケーションのインストールフォルダーから古いファイルを削除し、更新されたファイルをそのフォルダーに移動することを含め、すべてがうまく機能します。
しかし、新しいファイルはアプリケーションにまったく影響を与えないようです。テストのために、アプリケーションの Form Load イベントに MessageBox.Show を配置しました。デバッグすると、アプリは VS にメッセージボックスを表示します。binフォルダーからアプリを実行したときと同様に..アップデーターアプリがファイルをコピーすると、ファイルはそこにありますが、サイコロは何も変更されず、アプリが読み込まれたときにメッセージボックスが表示されません。さらに問題を調査したところ、アプリケーション フォルダー内の置換対象のファイルを手動で削除し、更新用の zip ファイルの内容をそのフォルダーに解凍しました。アプリを起動すると、メッセージ ボックスが表示されます。 app を bin フォルダーから app フォルダーに直接移動することもできます。
これは、私がキャッチしていない以下の関数の舞台裏で何かが起こっていると私に信じさせます。なぜこれが失敗するのか?
Function ApplyUpdates(ByVal c As Integer, ByVal e As List(Of MessagePart))
Dim xxxxState As Boolean = False
Dim _path As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "\XXXX\UpdateFiles\"
Dim d As Integer = 20
xxxxState = isProcessRunning("xxxx")
If xxxxState = True Then
KillxxxxTask()
End If
For Each _S In System.IO.Directory.GetFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "XXXX\UpdateFiles")
System.IO.File.Delete(_S)
Next
For Each att In e
Dim y As Boolean = UnZip(att.FileName)
Next
For Each f In System.IO.Directory.GetFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "\XXXX\UpdateFiles")
Dim y As String = Path.GetExtension(f)
Dim _fNM As String = Path.GetFileNameWithoutExtension(f)
If y.Contains("ex0") Then
My.Computer.FileSystem.RenameFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "\XXXX\UpdateFiles" + "\" + _fNM + y, _fNM + "." + "exe")
f = f.Replace("ex0", "exe")
End If
If y.Contains("dl0") Then
My.Computer.FileSystem.RenameFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "\XXXX\UpdateFiles" + "\" + _fNM + y, _fNM + "." + "dll")
f = f.Replace("dl0", "dll")
End If
updating(d, "Copying File : " + f)
d += 10
Dim fName As String = Path.GetFileName(f)
Next
For Each S In System.IO.Directory.GetFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "\XXXX\UpdateFiles")
Dim _ofile As String = Path.GetFileName(S)
If File.Exists("C:\XXXX\" + _ofile) Then
File.Delete("C:\XXXX\" + _ofile)
End If
' File.Copy(S, "C:\XXXX\" + _ofile, True)
Next
For Each S In System.IO.Directory.GetFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) + "\XXXX\UpdateFiles")
Dim _ofile As String = Path.GetFileName(S)
File.Move(S, "C:\XXXX\" + _ofile)
Next
updating(100, "Update Completed")
Return Nothing
End Function