這是一個winforms vb.net應用程序。由於一些限制,我無法使用VS中提供的內置clickOnce更新。所以爲了處理我的應用程序的更新,我寫了一個更新應用程序。下載電子郵件附件並對其進行處理。所有的工作都很好,包括從應用程序安裝文件夾中刪除舊文件,然後將更新的文件移動到該文件夾。用vb刪除文件,然後複製替換文件仍舊作爲舊文件
但新文件似乎對應用程序根本沒有任何影響。僅用於測試,我在應用程序的「表單加載」事件中放置了一個MessageBox.Show。當我調試時,該應用程序顯示VS中的消息框。以及當我從bin文件夾運行應用程序時。當我的更新程序應用程序複製文件在那裏,但沒有骰子沒有更改,沒有消息框顯示應用程序加載時。進一步調查問題我手動刪除了應用程序文件夾中要替換的文件,然後將更新zip文件的內容解壓縮到該文件夾中。已啓動應用程序和現在的消息框顯示..如果我將文件複製到應用程序直接從bin文件夾到它顯示的應用程序文件夾。
這使我相信在下面的函數背後有一些事情我不在捕捉。任何想法,爲什麼這是失敗?
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
您是否在刪除文件之前關閉應用程序,並在複製完成後重新啓動它?那是什麼killtask()呢? –
是的,這就是Killtask()..更新程序檢查應用程序是否正在運行。然後,如果它在執行更新之前終止了任務.. – Skindeep2366
我假設你在VS調試器下運行了更新程序,在頂部有一個斷點,並且驗證了每行代碼都可以達到您的預期目標嗎? –