1、初始化仓库
This commit is contained in:
72
Yjpp36/service/Updater.vb
Normal file
72
Yjpp36/service/Updater.vb
Normal file
@ -0,0 +1,72 @@
|
||||
Imports System.IO
|
||||
Imports System.Net
|
||||
Imports System.Web
|
||||
|
||||
Public Class Updater
|
||||
'Private Shared ReadOnly localPath As String = Application.ExecutablePath
|
||||
Private Shared ReadOnly tempPath As String = Path.Combine(Path.GetTempPath(), "update_temp.exe")
|
||||
Private Shared ReadOnly vbsPath As String = Path.Combine(Path.GetTempPath(), "update_script.vbs")
|
||||
|
||||
''' <summary>
|
||||
''' 开始更新任务
|
||||
''' </summary>
|
||||
''' <param name="localPath">目标地址</param>
|
||||
''' <param name="updateUrl">更新文件地址</param>
|
||||
''' <returns></returns>
|
||||
Public Shared Async Function StartUpdateAsync(localPath As String, updateUrl As String) As Task
|
||||
Try
|
||||
' 下载更新文件
|
||||
Using client As New WebClient()
|
||||
Await client.DownloadFileTaskAsync(updateUrl, tempPath)
|
||||
Logger.Info(updateUrl & "文件下载完毕")
|
||||
End Using
|
||||
|
||||
' 创建 VBS 脚本 (修正了 VBScript 语法错误)
|
||||
Dim vbsContent As String = $"
|
||||
Set WshShell = CreateObject(""WScript.Shell"")
|
||||
WScript.Sleep 4000
|
||||
|
||||
' 解除保护并替换 EXE
|
||||
On Error Resume Next
|
||||
Set fso = CreateObject(""Scripting.FileSystemObject"")
|
||||
|
||||
If fso.FileExists(""{Replace(localPath, "\", "\\")}"") Then
|
||||
Set f = fso.GetFile(""{Replace(localPath, "\", "\\")}"")
|
||||
f.Attributes = 0
|
||||
End If
|
||||
|
||||
If fso.FileExists(""{Replace(tempPath, "\", "\\")}"") Then
|
||||
fso.CopyFile ""{Replace(tempPath, "\", "\\")}"", ""{Replace(localPath, "\", "\\")}"", True
|
||||
fso.DeleteFile ""{Replace(tempPath, "\", "\\")}"", True
|
||||
End If
|
||||
|
||||
' 设置属性
|
||||
If fso.FileExists(""{Replace(localPath, "\", "\\")}"") Then
|
||||
Set f = fso.GetFile(""{Replace(localPath, "\", "\\")}"")
|
||||
f.Attributes = 4 + 2 + 1 ' System + Hidden + ReadOnly
|
||||
End If
|
||||
|
||||
' 启动新程序
|
||||
WshShell.Run ""{Replace(localPath, "\", "\\")}"", 0, False
|
||||
|
||||
' 删除自己
|
||||
fso.DeleteFile WScript.ScriptFullName, True
|
||||
"
|
||||
File.WriteAllText(vbsPath, vbsContent)
|
||||
|
||||
Logger.Info("启动脚本:" & vbsContent)
|
||||
' 启动 VBS 脚本
|
||||
Dim p As New Process()
|
||||
p.StartInfo.FileName = "wscript"
|
||||
p.StartInfo.Arguments = """" & vbsPath & """" ' 使用引号包裹路径
|
||||
p.Start()
|
||||
|
||||
Logger.Info("退出程序")
|
||||
' 退出当前程序
|
||||
Environment.Exit(0)
|
||||
Catch ex As Exception
|
||||
Logger.Error("更新失败:" & ex.Message)
|
||||
Throw ' 重要的:重新抛出异常,让调用者知道更新失败
|
||||
End Try
|
||||
End Function
|
||||
End Class
|
||||
Reference in New Issue
Block a user