这是一个 winforms vb.net 应用程序。由于某些限制,我无法使用 VS 中提供的内置 clickOnce 更新。因此,为了处理我的应用程序的更新,我编写了一个更新应用程序。它会下载电子邮件附件并对其进行处理。一切都很好,包括从应用程序安装文件夹中删除旧文件,然后将更新的文件移动到该文件夹。
但是新文件似乎对应用程序没有任何影响。只是为了测试,我在应用程序表单加载事件中放置了一个 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