我有一个用VB.Net
编写的程序,该程序应该自动更新。我已经找到了如何下载新文件并解压缩它,问题是我无法覆盖文件,只要它在执行中。这是怎么做到的?我想到了一个单独的exe上的“更新程序”但是会有同样的问题,当我做一些更改时我无法更新更新程序......
答案 0 :(得分:2)
只需关闭旧程序即可。
保留单独的更新程序,然后当您想要更新旧程序时,让更新程序关闭旧程序,然后下载新版本的应用程序。例如,
更新程序,
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Do While True
Dim client As New Net.WebClient
Dim newVersion As String = client.DownloadString("http://www.myWebsite.com/updates/latestVersion.txt")
If newVersion <> IO.File.ReadAllText("Your programs file location") Then
For Each p As Process In Process.GetProcesses
If p.ProcessName = "your program's process name" Then 'If you don't know what your program's process name is, simply run your program, run windows task manager, select 'processes' tab, scroll down untill you find your programs name.
p.Kill()
End If
Next
IO.File.Delete("old program file location")
client.DownloadFile("http://www.myWebsite.com/updates/12.05.2013.exe", "where ever you want to download your new program to (file location)")
client.Dispose()
End If
Threading.Thread.Sleep(300000) 'freeze thread for 5 mins...
Loop
End Sub
答案 1 :(得分:1)
为什么不创建ClickOnce部署并将其托管在某个地方?
答案 2 :(得分:1)
老问题,但我所做的是,当我在我的主程序中时,我复制重命名当前的更新程序,然后像这样调用重命名的更新程序:
(注意,代码已经过简化以便解释和说明)
FileCopy("MyUpdater.exe", "~MyUpdater.exe") ' rename the updater
Shell("~MyUpdater.exe") ' start the updater
END ' close the current program
然后,当您的更新程序完成它的工作时,它将更新MyUpdater.exe以及其他所有内容。
答案 3 :(得分:0)
简单的解决方案,
只是将exe文件源代码分成多个DLL文件(就像模块一样划分)并让主exe执行dll代码如
sub MDImainEXE_load()
这个DLL函数
端子
并且您可以使用相同的方法来更新exe
使用配置和DLL发送新的主exe,配置文件将包含要更新的DLL名称,如果更新exe必须更新然后将该DLL命名为参数使用因为更新exe将不包含代码只需使用来自配置文件参数的DLL文件名中的函数。
sub updateEXE_load()
这个DLL函数
结束子
如果感到困惑,那就问一下困惑。
答案 4 :(得分:0)