VB.Net程序应该自动更新

VB.Net程序应该自动更新,vb.net,auto-update,Vb.net,Auto Update,我有一个用VB.Net编写的程序,这个程序应该是自动更新的。我已经找到了如何下载新文件并解压缩它,问题是我不能覆盖文件,只要它在执行。这通常是如何做到的?我想在一个单独的exe上安装一个“更新程序”,但这也会有同样的问题,我在做一些更改时无法更新更新程序…为什么不创建一个ClickOnce部署并将其托管在某个地方?为什么不创建一个ClickOnce部署并将其托管在某个地方?简单解决方案, 只需将exe文件源代码划分为多个DLL文件(如模块划分),并使用主exe执行DLL代码,如 子MDImain

我有一个用VB.Net编写的程序,这个程序应该是自动更新的。我已经找到了如何下载新文件并解压缩它,问题是我不能覆盖文件,只要它在执行。这通常是如何做到的?我想在一个单独的exe上安装一个“更新程序”,但这也会有同样的问题,我在做一些更改时无法更新更新程序…

为什么不创建一个ClickOnce部署并将其托管在某个地方?

为什么不创建一个ClickOnce部署并将其托管在某个地方?

简单解决方案, 只需将exe文件源代码划分为多个DLL文件(如模块划分),并使用主exe执行DLL代码,如

子MDImainEXE_加载()
像那样的函数
末端接头

您可以使用相同的方法更新exe 发送带有配置和DLL的新主exe,配置文件将包含要更新的DLL名称,如果更新exe必须更新,则将该DLL名称作为要使用的参数,因为更新exe不包含代码,只需使用配置文件参数中DLL文件名的函数即可

子更新exe_load()
像那样的函数
端接头

如果困惑,那么询问困惑的是什么。

简单的解决方案, 只需将exe文件源代码划分为多个DLL文件(如模块划分),并使用主exe执行DLL代码,如

子MDImainEXE_加载()
像那样的函数
末端接头

您可以使用相同的方法更新exe 发送带有配置和DLL的新主exe,配置文件将包含要更新的DLL名称,如果更新exe必须更新,则将该DLL名称作为要使用的参数,因为更新exe不包含代码,只需使用配置文件参数中DLL文件名的函数即可

子更新exe_load()
像那样的函数
端接头


如果困惑,那么询问困惑的原因。

可能类似于为正在运行的进程创建转储文件

你看到了吗


但这取决于您的VB版本……

可能类似于为正在运行的进程创建转储文件

你看到了吗


但这取决于您的VB版本……

只需关闭旧程序即可

保留单独的更新程序,然后当你想更新旧程序时,让更新程序关闭旧程序,然后下载新版本的应用程序。比如说,

更新程序

 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
Private Sub Form1\u Load(发送方作为对象,e作为事件参数)处理Me.Load
做正确的事
Dim客户端作为新的Net.WebClient
Dim newVersion作为String=client.DownloadString(“http://www.myWebsite.com/updates/latestVersion.txt")
如果是新版本IO.File.ReadAllText(“您的程序文件位置”),则
对于Process.GetProcesses中的每个p As进程
如果p.ProcessName=“您的程序的进程名”,则“如果您不知道您的程序的进程名,只需运行您的程序,运行windows任务管理器,选择“进程”选项卡,向下滚动,直到找到您的程序名。
p、 杀死
如果结束
下一个
IO.File.Delete(“旧程序文件位置”)
client.DownloadFile(“http://www.myWebsite.com/updates/12.05.2013.exe“,“您希望将新程序下载到的任何位置(文件位置)”)
client.Dispose()
如果结束
线程。线程。睡眠(300000)'冻结线程5分钟。。。
环
端接头

只需关闭旧程序即可

保留单独的更新程序,然后当你想更新旧程序时,让更新程序关闭旧程序,然后下载新版本的应用程序。比如说,

更新程序

 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
Private Sub Form1\u Load(发送方作为对象,e作为事件参数)处理Me.Load
做正确的事
Dim客户端作为新的Net.WebClient
Dim newVersion作为String=client.DownloadString(“http://www.myWebsite.com/updates/latestVersion.txt")
如果是新版本IO.File.ReadAllText(“您的程序文件位置”),则
对于Process.GetProcesses中的每个p As进程
如果p.ProcessName=“您的程序的进程名”,则“如果您不知道您的程序的进程名,只需运行您的程序,运行windows任务管理器,选择“进程”选项卡,向下滚动,直到找到您的程序名。
p、 杀死
如果结束
下一个
IO.File.Delete(“旧程序文件位置”)
client.DownloadFile(“http://www.myWebsite.com/updates/12.05.2013.exe“,“您希望将新程序下载到的任何位置(文件位置)”)
client.Dispose()
如果结束
线程。线程。睡眠(300000)'冻结线程5分钟。。。
环
端接头

老问题,但我要做的是,当我在主程序中时,复制重命名当前更新程序,然后调用重命名后的更新程序,如下所示:

(注意,代码已简化以便于解释和说明)


然后,当你的更新程序完成它的工作时,它将更新MyUpdater.exe以及其他所有内容。

老问题,但我要做的是,当我在主程序中时,我复制重命名当前更新程序,然后像这样调用重命名后的更新程序:

(注意,代码已简化以便于解释和说明)


然后,当你的更新程序完成它的工作时,它将更新MyUpdater.exe以及其他所有内容。

老实说,所有这些都让我感到困惑。。(此处为绿色)应用程序由单个exe文件组成。。你不知道Visual Studio内置了这个功能,对吗?是什么让你感到困惑,你得到了多少,还是计划实现它,以便我们了解你的想法implementation@Just道格拉斯,是的,我知道,但我不喜欢。它给人的麻烦比它的多