2024-03-11 16:32:52 +08:00
|
|
|
|
Imports System.IO
|
|
|
|
|
|
Imports System.Net
|
|
|
|
|
|
Imports System.Net.Sockets
|
|
|
|
|
|
Imports System.Text
|
|
|
|
|
|
Imports UTS_Core.Database
|
|
|
|
|
|
Imports UTS_Core.Security
|
|
|
|
|
|
Imports UTS_Core.UTSModule
|
|
|
|
|
|
Imports UTS_Core.UTSModule.DbConnect
|
|
|
|
|
|
Imports UTS_Core.UTSModule.DbTableModel.Manage
|
|
|
|
|
|
Imports UTS_Core.UTSModule.License
|
|
|
|
|
|
|
|
|
|
|
|
Public Class FrmUpdateConfig
|
|
|
|
|
|
Public Property RootPath() As String
|
|
|
|
|
|
Public Property LicenseFileName() As String
|
|
|
|
|
|
Public Property DataServiceName() As String
|
|
|
|
|
|
Public Property UpdateServiceName() As String
|
|
|
|
|
|
|
|
|
|
|
|
Public Property DataServiceAlias() As String
|
|
|
|
|
|
|
|
|
|
|
|
Private _srcLicenseFilePath As String
|
|
|
|
|
|
|
|
|
|
|
|
Private _destLicenseFilePath As String
|
|
|
|
|
|
|
|
|
|
|
|
Private _serviceRegister As ServiceRegister
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 窗体加载
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="sender"></param>
|
|
|
|
|
|
''' <param name="e"></param>
|
|
|
|
|
|
Private Sub FrmUpdateConfig_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
|
|
|
|
InitConfig()
|
|
|
|
|
|
|
|
|
|
|
|
TBoRootPath.Text = RootPath
|
|
|
|
|
|
TBoLicnese.Text = _srcLicenseFilePath
|
|
|
|
|
|
|
|
|
|
|
|
TxtAlias.Text = DataServiceAlias
|
|
|
|
|
|
|
|
|
|
|
|
RtxTip.Text = String.Empty
|
|
|
|
|
|
|
|
|
|
|
|
If rb_SyncFloder_FollowRootPath.Checked Then lab_SyncPath.Text = TBoRootPath.Text & "\AUTS_Sync"
|
|
|
|
|
|
If rb_SyncFloder_Spicfied.Checked Then lab_SyncPath.Text = tb_SyncFolder_BySelected.Text & "\AUTS_Sync"
|
|
|
|
|
|
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 初始化配置信息
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
Private Sub InitConfig()
|
|
|
|
|
|
Try
|
|
|
|
|
|
UpdateInstallTip(0, "[Registry Value]")
|
|
|
|
|
|
|
|
|
|
|
|
RootPath = UtsRegistry.RootPath
|
|
|
|
|
|
LicenseFileName = UtsRegistry.LicenseFileName
|
|
|
|
|
|
|
|
|
|
|
|
DataServiceAlias = UtsRegistry.DataServiceAlias
|
|
|
|
|
|
|
|
|
|
|
|
_srcLicenseFilePath = UtsRegistry.LicenseFilePath
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(0, "[Default Value]")
|
|
|
|
|
|
|
|
|
|
|
|
RootPath = $"C:\AUTS"
|
|
|
|
|
|
DataServiceAlias = String.Empty
|
|
|
|
|
|
LicenseFileName = String.Empty
|
|
|
|
|
|
_srcLicenseFilePath = String.Empty
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
DataServiceName = $"AUTS_DataService"
|
|
|
|
|
|
UpdateServiceName = $"AUTS_UpdateService"
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 选择所需要存放的根路径
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="sender"></param>
|
|
|
|
|
|
''' <param name="e"></param>
|
|
|
|
|
|
Private Sub BtnRootPath_Click(sender As Object, e As EventArgs) Handles BtnRootPath.Click
|
|
|
|
|
|
TBoRootPath.Text = SelectFolderString()
|
|
|
|
|
|
If rb_SyncFloder_FollowRootPath.Checked Then lab_SyncPath.Text = TBoRootPath.Text & "\AUTS_Sync"
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 选择同步文件夹
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <returns></returns>
|
|
|
|
|
|
Private Function SelectSyncFolderString() As String
|
|
|
|
|
|
Dim txtString As String = String.Empty
|
|
|
|
|
|
Using folder As New FolderBrowserDialog
|
|
|
|
|
|
If folder.ShowDialog() = DialogResult.OK Then
|
|
|
|
|
|
txtString = folder.SelectedPath
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Using
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(txtString) Then
|
|
|
|
|
|
txtString = TBoRootPath.Text & "\AUTS_Sync"
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Return txtString
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 自定义选择文件夹
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <returns></returns>
|
|
|
|
|
|
Private Function SelectFolderString() As String
|
|
|
|
|
|
Dim txtString As String = String.Empty
|
|
|
|
|
|
Using folder As New FolderBrowserDialog
|
|
|
|
|
|
If folder.ShowDialog() = DialogResult.OK Then
|
|
|
|
|
|
txtString = folder.SelectedPath
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Using
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(txtString) Then
|
|
|
|
|
|
txtString = "C:\AUTS"
|
|
|
|
|
|
Else
|
|
|
|
|
|
If txtString.EndsWith("AUTS") = False Then
|
|
|
|
|
|
If txtString.EndsWith("\") = False Then
|
|
|
|
|
|
txtString &= "\"
|
|
|
|
|
|
End If
|
|
|
|
|
|
txtString &= "AUTS"
|
|
|
|
|
|
End If
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Return txtString
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 选择所需要的License文件
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="sender"></param>
|
|
|
|
|
|
''' <param name="e"></param>
|
|
|
|
|
|
Private Sub BtnLicense_Click(sender As Object, e As EventArgs) Handles BtnLicense.Click
|
|
|
|
|
|
TBoLicnese.Text = SelectFileString()
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 自定义选择文件
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <returns></returns>
|
|
|
|
|
|
Private Function SelectFileString() As String
|
|
|
|
|
|
Dim txtString As String = String.Empty
|
|
|
|
|
|
Using folder As New OpenFileDialog
|
|
|
|
|
|
If folder.ShowDialog() = DialogResult.OK Then
|
|
|
|
|
|
'txtString = folder.SafeFileName
|
|
|
|
|
|
txtString = folder.FileName
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Using
|
|
|
|
|
|
Return txtString
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub UpdateProgressBar(value As Integer)
|
|
|
|
|
|
TsPrgInstall.Value = value
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub UpdateInstallLog(value As Integer, log As String)
|
|
|
|
|
|
If value = 0 Then RtxTip.Clear()
|
|
|
|
|
|
|
|
|
|
|
|
RtxTip.AppendText($"[{value,3}%]-{log}{vbCrLf}")
|
|
|
|
|
|
RtxTip.ScrollToCaret()
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub UpdateInstallTip(value As Integer, str As String)
|
|
|
|
|
|
UpdateProgressBar(value)
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallLog(value, str)
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 开始一键发布更新
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="sender"></param>
|
|
|
|
|
|
''' <param name="e"></param>
|
|
|
|
|
|
Private Sub BtnStartUpdate_Click(sender As Object, e As EventArgs) Handles BtnStartUpdate.Click
|
|
|
|
|
|
UpdateInstallTip(0, "Begin Install...")
|
|
|
|
|
|
|
|
|
|
|
|
UpdateCacheValue()
|
|
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
|
UpdateInstallTip(0, "Begin Check Input Info...")
|
|
|
|
|
|
CheckCacheValue()
|
|
|
|
|
|
UpdateInstallTip(5, "Check Input Info Success!")
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(100, $"Check Input Info Error:{ex.Message}")
|
|
|
|
|
|
Return
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
'创建所需文件夹
|
|
|
|
|
|
Try
|
|
|
|
|
|
UpdateInstallTip(10, "Begin CreateSystemFolder...")
|
|
|
|
|
|
CreateSystemFolder()
|
|
|
|
|
|
UpdateInstallTip(15, "CreateSystemFolder Success!")
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(100, $"CreateSystemFolder Error:{ex.Message}")
|
|
|
|
|
|
Return
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
'拷贝License文件至指定路径
|
|
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
|
UpdateInstallTip(15, $"Begin Copy License {_srcLicenseFilePath} To {_destLicenseFilePath}...")
|
|
|
|
|
|
If String.Compare(_srcLicenseFilePath, _destLicenseFilePath, True) <> 0 Then
|
|
|
|
|
|
File.Copy(_srcLicenseFilePath, _destLicenseFilePath, True)
|
|
|
|
|
|
Else
|
|
|
|
|
|
UpdateInstallTip(20, "Don't Need Copy License !")
|
|
|
|
|
|
End If
|
|
|
|
|
|
UpdateInstallTip(20, "Copy License Success!")
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(100, $"Copy License Error:{ex.Message}")
|
|
|
|
|
|
Return
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'下载安装
|
|
|
|
|
|
Try
|
|
|
|
|
|
UpdateInstallTip(20, "Begin InstallUpdateService...")
|
2024-04-09 11:08:56 +08:00
|
|
|
|
'Momo 2024-04-05 Service ID 由 ProcessorID + AlisaName 构成,从Service Controller 传参传过来
|
|
|
|
|
|
'InstallUpdateService()
|
|
|
|
|
|
InstallUpdateService(DataServiceAlias)
|
|
|
|
|
|
|
2024-03-11 16:32:52 +08:00
|
|
|
|
UpdateInstallTip(100, "InstallUpdateService Success!")
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(100, $"InstallUpdateService Error:{ex.Message}")
|
|
|
|
|
|
Return
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
'创建同步目录
|
|
|
|
|
|
UpdateInstallTip(100, "Begin to create sync folder...")
|
|
|
|
|
|
If CreateSyncFolder() = True Then
|
|
|
|
|
|
UpdateInstallTip(100, "Success to Create sync folder!")
|
|
|
|
|
|
Else
|
|
|
|
|
|
UpdateInstallTip(100, "Fail to Create sync folder!")
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub UpdateCacheValue()
|
|
|
|
|
|
RootPath = TBoRootPath.Text
|
|
|
|
|
|
LicenseFileName = Path.GetFileName(TBoLicnese.Text)
|
|
|
|
|
|
_srcLicenseFilePath = TBoLicnese.Text
|
|
|
|
|
|
DataServiceAlias = TxtAlias.Text
|
|
|
|
|
|
|
|
|
|
|
|
_serviceGroup = TxtGroup.Text
|
|
|
|
|
|
_serviceRoles = TxtRoles.Text
|
|
|
|
|
|
|
|
|
|
|
|
_dataServiceDirPath = $"{RootPath}\{DataServiceName}"
|
|
|
|
|
|
_updateServiceDirPath = $"{RootPath}\{UpdateServiceName}"
|
|
|
|
|
|
_dataServicePacketDirPath = $"{RootPath}\DataServiceDownload"
|
|
|
|
|
|
|
|
|
|
|
|
_licenseDirPath = $"{RootPath}\License"
|
|
|
|
|
|
_destLicenseFilePath = $"{_licenseDirPath}\{LicenseFileName}"
|
|
|
|
|
|
|
|
|
|
|
|
_localDbDirPath = $"{RootPath}\LocalDB"
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub CheckCacheValue()
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(RootPath) Then
|
|
|
|
|
|
Throw New Exception($"Invalid RootPath:{RootPath}")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If File.Exists(_srcLicenseFilePath) = False Then
|
|
|
|
|
|
Throw New Exception($"Invalid LicenseFilePath:{_srcLicenseFilePath}")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(LicenseFileName) Then
|
|
|
|
|
|
Throw New Exception($"Invalid LicenseFileName:{LicenseFileName}")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(DataServiceName) Then
|
|
|
|
|
|
Throw New Exception($"Invalid DataServiceName:{DataServiceName}")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(UpdateServiceName) Then
|
|
|
|
|
|
Throw New Exception($"Invalid UpdateServiceName:{UpdateServiceName}")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(_serviceGroup) Then
|
|
|
|
|
|
Throw New Exception($"子网名称不能为空,请重试")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(_serviceRoles) Then
|
|
|
|
|
|
Throw New Exception($"设备角色不能为空 ,请重试")
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Region "发布更新"
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary> License检测 </summary>
|
|
|
|
|
|
Private _license As License
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary> 初始化FTP服务类 </summary>
|
|
|
|
|
|
Private _ftpClient As FtpService
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>数据服务的文件夹路径,不含版本</summary>
|
|
|
|
|
|
Private _dataServiceDirPath As String
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>更新服务的文件夹路径,不含版本</summary>
|
|
|
|
|
|
Private _updateServiceDirPath As String
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>数据服务升级时存放从FTP下载的最新包文件夹路径</summary>
|
|
|
|
|
|
Private _dataServicePacketDirPath As String
|
|
|
|
|
|
|
|
|
|
|
|
Private _licenseDirPath As String
|
|
|
|
|
|
|
|
|
|
|
|
Private _localDbDirPath As String
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary> 服务子网名(组名) </summary>
|
|
|
|
|
|
Private _serviceGroup As String
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary> 服务角色,0为普通,1为服务器 </summary>
|
|
|
|
|
|
Private _serviceRoles As String
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>Ftp远程升级文件夹路径</summary>
|
|
|
|
|
|
Private ReadOnly _ftpUpdateDirPath As String = $"/uts_Manager/AUTS/Service"
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>同步目录:auts_public</summary>
|
|
|
|
|
|
Private _sync_auts_public_DirPath As String
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>同步目录:auts_vendor</summary>
|
|
|
|
|
|
Private _sync_auts_vendor_DirPath As String
|
|
|
|
|
|
|
2024-04-09 11:08:56 +08:00
|
|
|
|
''' <summary>App:app</summary>
|
|
|
|
|
|
Private _sync_auts_app_DirPath As String
|
|
|
|
|
|
|
2024-03-11 16:32:52 +08:00
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 创建运行时必要文件夹
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
Private Sub CreateSystemFolder()
|
|
|
|
|
|
Directory.CreateDirectory(RootPath) '创建UTS根目录
|
|
|
|
|
|
Directory.CreateDirectory(_dataServiceDirPath) '数据服务文件夹路径
|
|
|
|
|
|
Directory.CreateDirectory(_updateServiceDirPath) '更新服务文件夹路径
|
|
|
|
|
|
Directory.CreateDirectory(_dataServicePacketDirPath) '数据服务下载文件夹路径
|
|
|
|
|
|
|
|
|
|
|
|
Directory.CreateDirectory(_licenseDirPath) 'License文件夹
|
|
|
|
|
|
Directory.CreateDirectory(_localDbDirPath) 'DB文件夹
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 创建同步文件夹
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
Private Function CreateSyncFolder() As Boolean
|
|
|
|
|
|
'同步目录
|
|
|
|
|
|
Dim syncRootPath As String = lab_SyncPath.Text
|
|
|
|
|
|
If String.IsNullOrEmpty(syncRootPath) = True Then
|
|
|
|
|
|
MsgBox("同步目录设置不正确!")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
_sync_auts_public_DirPath = $"{syncRootPath}\uts_Public"
|
|
|
|
|
|
_sync_auts_vendor_DirPath = $"{syncRootPath}\uts_{_license.VendorName}"
|
2024-04-09 11:08:56 +08:00
|
|
|
|
_sync_auts_app_DirPath = $"{RootPath}\App"
|
2024-03-11 16:32:52 +08:00
|
|
|
|
|
|
|
|
|
|
Directory.CreateDirectory(_sync_auts_public_DirPath) 'uts_Public
|
|
|
|
|
|
Directory.CreateDirectory(_sync_auts_vendor_DirPath) 'uts_VendorName
|
2024-04-09 11:08:56 +08:00
|
|
|
|
Directory.CreateDirectory(_sync_auts_app_DirPath) 'app
|
2024-03-11 16:32:52 +08:00
|
|
|
|
|
|
|
|
|
|
If System.IO.Directory.Exists(_sync_auts_public_DirPath) = False OrElse System.IO.Directory.Exists(_sync_auts_vendor_DirPath) = False Then
|
|
|
|
|
|
MsgBox("同步目录创建不成功!")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Return True
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 获取更新服务的最新信息
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
Private Function GetUpdateServiceInfo(serviceName As String) As UpdatePackageInfo
|
|
|
|
|
|
|
|
|
|
|
|
If DbConnector.CanConnectToRemote = False Then '判断网络连接状态
|
|
|
|
|
|
Throw New Exception($"无法连接到数据库!")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
|
|
|
|
|
|
db.Open()
|
|
|
|
|
|
|
|
|
|
|
|
Dim tableName As String = $"{SwUpdateTable.TableName}"
|
|
|
|
|
|
Dim colNames As New List(Of String) From {
|
|
|
|
|
|
$"{SwUpdateTable.ColNamesEnum.LastVersion}",
|
|
|
|
|
|
$"{SwUpdateTable.ColNamesEnum.BinPackageMd5}",
|
|
|
|
|
|
$"{SwUpdateTable.ColNamesEnum.PackageName}"
|
|
|
|
|
|
}
|
|
|
|
|
|
Dim condition As String = $"`{SwUpdateTable.ColNamesEnum.SoftwareName}` = '{serviceName}'"
|
|
|
|
|
|
|
|
|
|
|
|
Dim dtServiceInfo As DataTable = db.ExecuteDataTable(db.CmdHelper.DbSearch(UtsDb.RemotePublicDb, colNames, tableName, condition))
|
|
|
|
|
|
If dtServiceInfo.Rows.Count <= 0 Then
|
|
|
|
|
|
Throw New Exception($"从数据库获取不到{serviceName}的信息!")
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Dim packetInfo As New UpdatePackageInfo
|
|
|
|
|
|
packetInfo.BinPackageMd5 = CStr(dtServiceInfo(0)($"{SwUpdateTable.ColNamesEnum.BinPackageMd5}"))
|
|
|
|
|
|
packetInfo.LastVersion = CStr(dtServiceInfo(0)($"{SwUpdateTable.ColNamesEnum.LastVersion}"))
|
|
|
|
|
|
packetInfo.PackageName = CStr(dtServiceInfo(0)($"{SwUpdateTable.ColNamesEnum.PackageName}"))
|
|
|
|
|
|
|
|
|
|
|
|
db.Close()
|
|
|
|
|
|
Return packetInfo
|
|
|
|
|
|
End Using
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Public Function GetUtsHost() As Boolean
|
|
|
|
|
|
Dim _udpClient As New UdpClient()
|
|
|
|
|
|
Dim _webPacker As New UtsWebPacket
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallTip(20, $"Start Get Uts Host")
|
|
|
|
|
|
'获取webService目标地址
|
|
|
|
|
|
|
|
|
|
|
|
Dim remoteIP As IPEndPoint = Nothing
|
|
|
|
|
|
Try
|
|
|
|
|
|
If remoteIP Is Nothing Then
|
|
|
|
|
|
|
|
|
|
|
|
remoteIP = New IPEndPoint(Dns.GetHostAddresses("www.uts-data.com")(0), 5980)
|
|
|
|
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(20, $"Send Heartbeat Packet Fail:{ex.Message}")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
'发送获取主机地址命令
|
|
|
|
|
|
Try
|
|
|
|
|
|
Dim packet() As Byte = _webPacker.FillPacket(CByte(UtsWebPacket.Commands.Heartbeat), BitConverter.GetBytes(0))
|
|
|
|
|
|
_udpClient.Send(packet, packet.Length, remoteIP)
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(20, $"Send Heartbeat Packet Fail:{ex.Message}")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
'等待回复
|
|
|
|
|
|
Dim timeout As Integer = 5 * 1000
|
|
|
|
|
|
Dim lastTime As Date = Now
|
|
|
|
|
|
Dim length As Integer
|
|
|
|
|
|
Dim recvBuf() As Byte = Nothing
|
|
|
|
|
|
Dim recviceIp As New IPEndPoint(IPAddress.Any, 0)
|
|
|
|
|
|
While (Now - lastTime).TotalMilliseconds < timeout
|
|
|
|
|
|
length = _udpClient.Available
|
|
|
|
|
|
If length > 0 Then
|
|
|
|
|
|
recvBuf = _udpClient.Receive(recviceIp)
|
|
|
|
|
|
Exit While
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Threading.Thread.Sleep(1000)
|
|
|
|
|
|
End While
|
|
|
|
|
|
|
|
|
|
|
|
If recvBuf Is Nothing Then
|
|
|
|
|
|
UpdateInstallTip(20, $"Get Host Fail!")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'校验
|
|
|
|
|
|
Try
|
|
|
|
|
|
_webPacker.CheckPacket(recvBuf)
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(20, $"Check Packet Error:{ex.Message}")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
'处理回复
|
|
|
|
|
|
Dim cmdByte As Byte = recvBuf(UtsWebPacket.PacketBits.Command)
|
|
|
|
|
|
|
|
|
|
|
|
'不是回复心跳包
|
|
|
|
|
|
If cmdByte <> 1 Then Return False
|
|
|
|
|
|
|
|
|
|
|
|
Dim type As Integer
|
|
|
|
|
|
Dim ftpHost As String = ""
|
|
|
|
|
|
Dim dbHost As String = ""
|
|
|
|
|
|
For i As Integer = UtsWebPacket.PacketBits.Param + 4 To recvBuf.Count - 1
|
|
|
|
|
|
type = recvBuf(i)
|
|
|
|
|
|
length = recvBuf(i + 1)
|
|
|
|
|
|
|
|
|
|
|
|
If length = 0 Then
|
|
|
|
|
|
UpdateInstallTip(20, $"Invalid data length!")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Select Case type
|
|
|
|
|
|
Case 1 'ftp服务器地址
|
|
|
|
|
|
ftpHost = Encoding.UTF8.GetString(recvBuf, i + 2, length)
|
|
|
|
|
|
Case 2 'db服务器地址
|
|
|
|
|
|
dbHost = Encoding.UTF8.GetString(recvBuf, i + 2, length)
|
|
|
|
|
|
End Select
|
|
|
|
|
|
i += length + 1
|
|
|
|
|
|
Next
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrEmpty(ftpHost) Then
|
|
|
|
|
|
UpdateInstallTip(20, $"Get FtpHost Fail,Host is null.")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
Else
|
|
|
|
|
|
If String.Compare(UtsRegistry.FtpHost, ftpHost) <> 0 Then
|
|
|
|
|
|
UtsRegistry.FtpHost = ftpHost '写入注册表
|
|
|
|
|
|
End If
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrEmpty(dbHost) Then
|
|
|
|
|
|
UpdateInstallTip(20, $"Get DbHost Fail,Host is null.")
|
|
|
|
|
|
Return False
|
|
|
|
|
|
Else
|
|
|
|
|
|
If String.Compare(UtsRegistry.DbHost, dbHost) <> 0 Then
|
|
|
|
|
|
UtsRegistry.DbHost = dbHost '写入注册表
|
|
|
|
|
|
End If
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallTip(20, $"Get Uts Host Success!")
|
|
|
|
|
|
Return True
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 一键更新
|
|
|
|
|
|
''' </summary>
|
2024-04-09 11:08:56 +08:00
|
|
|
|
Private Sub InstallUpdateService(Optional AlisaName As String = "")
|
2025-06-06 22:34:31 +08:00
|
|
|
|
'todo:云端获取服务器地址写入注册表
|
|
|
|
|
|
'If GetUtsHost() = False Then Return '根据License信息,获取服务器地址
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-03-11 16:32:52 +08:00
|
|
|
|
|
|
|
|
|
|
'校验License
|
|
|
|
|
|
UpdateInstallTip(20, "Begin CheckLicense...")
|
|
|
|
|
|
_license = New License(_destLicenseFilePath)
|
|
|
|
|
|
_license.CheckLicense()
|
|
|
|
|
|
UtsDb.InitConnectParams(_license) '根据License信息,初始化数据库连接信息
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallTip(25, "CheckLicense Success!")
|
|
|
|
|
|
|
|
|
|
|
|
_ftpClient = New FtpService(UtsRegistry.FtpHost, CInt(_license.FtpPort), _license.FtpUser, _license.FtpPwd)
|
|
|
|
|
|
|
|
|
|
|
|
'获取远程数据库内容
|
|
|
|
|
|
Dim packetInfo As UpdatePackageInfo = GetUpdateServiceInfo(UpdateServiceName)
|
|
|
|
|
|
|
|
|
|
|
|
'检测服务存在
|
|
|
|
|
|
If WinService.ServicesExists(UpdateServiceName) Then
|
|
|
|
|
|
'Dim updateSerVer As String = UtsRegistry.UpdateServiceVersion
|
|
|
|
|
|
'If NeedToUpdateService(updateSerVer, packetInfo.LastVersion) = False Then
|
|
|
|
|
|
' UpdateInstallTip(100, $"UpdateService is latest version:{updateSerVer}!")
|
|
|
|
|
|
' Return
|
|
|
|
|
|
'End If
|
|
|
|
|
|
|
|
|
|
|
|
'卸载当前服务
|
|
|
|
|
|
WinService.UnInstallService(UtsRegistry.UpdateServiceFilePath, Nothing)
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
|
'注册服务
|
|
|
|
|
|
_serviceRegister = New ServiceRegister()
|
|
|
|
|
|
_serviceRegister.LicenseID = _license.ID
|
|
|
|
|
|
_serviceRegister.VendorName = _license.VendorName
|
|
|
|
|
|
_serviceRegister.ExpirationDate = _license.ExpirationDate
|
|
|
|
|
|
|
|
|
|
|
|
_serviceRegister.UsVersion = packetInfo.LastVersion
|
|
|
|
|
|
_serviceRegister.TerminalAlias = DataServiceAlias
|
|
|
|
|
|
|
|
|
|
|
|
_serviceRegister.Roles = _serviceRoles
|
|
|
|
|
|
_serviceRegister.Group = _serviceGroup
|
2024-04-09 11:08:56 +08:00
|
|
|
|
' Momo 2024-04-05 Service ID 由 ProcessorID + AlisaName 构成,从Service Controller 传参传过来
|
|
|
|
|
|
'_serviceRegister.RegisterService()
|
|
|
|
|
|
_serviceRegister.RegisterService(AlisaName)
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-03-11 16:32:52 +08:00
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
UpdateInstallTip(30, $"Register Service Fail,{ex.Message}")
|
|
|
|
|
|
Return
|
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallTip(30, "Register Service Success!")
|
|
|
|
|
|
|
|
|
|
|
|
'下载
|
|
|
|
|
|
UpdateInstallTip(40, $"Begin Download...")
|
|
|
|
|
|
DownloadServicePacket(packetInfo)
|
|
|
|
|
|
UpdateInstallTip(100, $"Download Success!")
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 下载服务包,完成服务安装
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="packetInfo">数据库中该程序包的信息</param>
|
|
|
|
|
|
''' <returns></returns>
|
|
|
|
|
|
Private Function DownloadServicePacket(packetInfo As UpdatePackageInfo) As Boolean
|
|
|
|
|
|
Dim localFilePath As String = $"{_dataServicePacketDirPath}\{packetInfo.PackageName}"
|
|
|
|
|
|
Dim ftpFilePath As String = $"{_ftpUpdateDirPath}\{packetInfo.PackageName}"
|
|
|
|
|
|
Dim updateSerDirVer As String = $"{_updateServiceDirPath}\{packetInfo.LastVersion}"
|
|
|
|
|
|
|
|
|
|
|
|
'检测本地包是否存在
|
|
|
|
|
|
If Directory.Exists(_dataServicePacketDirPath) = False Then Directory.CreateDirectory(_dataServicePacketDirPath)
|
|
|
|
|
|
If Directory.Exists(updateSerDirVer) = False Then Directory.CreateDirectory(updateSerDirVer)
|
|
|
|
|
|
|
|
|
|
|
|
'删除本地已有下载包
|
|
|
|
|
|
If File.Exists(localFilePath) Then
|
|
|
|
|
|
File.Delete(localFilePath)
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
'下载FTP文件
|
|
|
|
|
|
UpdateInstallTip(40, $"Begin Download FtpFile {ftpFilePath} to {localFilePath}...")
|
|
|
|
|
|
_ftpClient.FtpDownload(ftpFilePath, localFilePath)
|
|
|
|
|
|
UpdateInstallTip(50, $"ftpPath:{ftpFilePath},localPath:{localFilePath},下载文件成功!")
|
|
|
|
|
|
|
|
|
|
|
|
Threading.Thread.Sleep(2000)
|
|
|
|
|
|
|
|
|
|
|
|
'更新包文件校验
|
|
|
|
|
|
UpdateInstallTip(50, $"开始校验服务包文件......")
|
|
|
|
|
|
CheckDataServicePacket(localFilePath, packetInfo)
|
|
|
|
|
|
UpdateInstallTip(60, $"校验服务包成功!")
|
|
|
|
|
|
|
|
|
|
|
|
Threading.Thread.Sleep(2000)
|
|
|
|
|
|
|
|
|
|
|
|
'解压,安装,启动服务
|
|
|
|
|
|
UpdateInstallTip(60, $"开始解压文件{localFilePath}到服务下版本文件夹{updateSerDirVer}......")
|
|
|
|
|
|
UTS_Core.Compress.Compress.LoadFromZip(updateSerDirVer, localFilePath)
|
|
|
|
|
|
UpdateInstallTip(70, $"解压成功!")
|
|
|
|
|
|
|
|
|
|
|
|
Threading.Thread.Sleep(2000)
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallTip(70, $"Begin InstallService {updateSerDirVer}\{UpdateServiceName}...")
|
|
|
|
|
|
WinService.InstallService($"{updateSerDirVer}\{UpdateServiceName}.exe", Nothing)
|
|
|
|
|
|
UpdateInstallTip(80, $"InstallService Success!")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'更新注册表
|
|
|
|
|
|
UpdateInstallTip(80, $"Begin Update UtsRegistry.")
|
|
|
|
|
|
UtsRegistry.RootPath = RootPath
|
|
|
|
|
|
UtsRegistry.LicenseFileName = LicenseFileName
|
|
|
|
|
|
UtsRegistry.DataServiceName = DataServiceName
|
|
|
|
|
|
UtsRegistry.DataServiceAlias = DataServiceAlias
|
|
|
|
|
|
UtsRegistry.UpdateServiceName = UpdateServiceName
|
|
|
|
|
|
UtsRegistry.UpdateServiceVersion = packetInfo.LastVersion
|
|
|
|
|
|
UtsRegistry.Roles = _serviceRoles
|
|
|
|
|
|
UtsRegistry.BarnchNet = _serviceGroup
|
|
|
|
|
|
UpdateInstallTip(90, $"Update UtsRegistry Success.")
|
|
|
|
|
|
|
|
|
|
|
|
'启动服务
|
|
|
|
|
|
UpdateInstallTip(90, $"开始启动服务程序......")
|
|
|
|
|
|
WinService.StartService(UpdateServiceName)
|
|
|
|
|
|
|
|
|
|
|
|
UpdateInstallTip(95, $"启动服务程序{UpdateServiceName}成功!")
|
|
|
|
|
|
|
|
|
|
|
|
Return True
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 校验数据服务包
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="localFilePath"></param>
|
|
|
|
|
|
''' <param name="packetInfo"></param>
|
|
|
|
|
|
Private Sub CheckDataServicePacket(localFilePath As String, packetInfo As UpdatePackageInfo)
|
|
|
|
|
|
Dim localMd5 As String = Md5.GetFileMd5(localFilePath)
|
|
|
|
|
|
Dim remoteMd5 As String = packetInfo.BinPackageMd5
|
|
|
|
|
|
|
|
|
|
|
|
If String.Compare(localMd5, remoteMd5, True) <> 0 Then
|
|
|
|
|
|
Throw New Exception($"Check Packet Fail!localMd5:{localMd5},remoteMd5:{remoteMd5}")
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 判断本地与云端版本号是否一致,不一致则代表需要更新数据服务
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="localVer">本地数据服务版本号</param>
|
|
|
|
|
|
''' <param name="remoteVer">远端数据服务版本号</param>
|
|
|
|
|
|
''' <returns></returns>
|
|
|
|
|
|
Private Function NeedToUpdateService(localVer As String, remoteVer As String) As Boolean
|
|
|
|
|
|
If String.IsNullOrWhiteSpace(localVer) OrElse String.IsNullOrWhiteSpace(remoteVer) Then Return False
|
|
|
|
|
|
If String.Compare(localVer, remoteVer) = 0 Then Return False
|
|
|
|
|
|
|
|
|
|
|
|
Return True
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
#End Region
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
|
''' 取消关闭窗体
|
|
|
|
|
|
''' </summary>
|
|
|
|
|
|
''' <param name="sender"></param>
|
|
|
|
|
|
''' <param name="e"></param>
|
|
|
|
|
|
Private Sub BtnCancel_Click(sender As Object, e As EventArgs) Handles BtnCancel.Click
|
|
|
|
|
|
DialogResult = DialogResult.No
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub rb_SyncFloder_FollowRootPath_CheckedChanged(sender As Object, e As EventArgs) Handles rb_SyncFloder_FollowRootPath.CheckedChanged
|
|
|
|
|
|
If rb_SyncFloder_FollowRootPath.Checked Then lab_SyncPath.Text = TBoRootPath.Text & "\AUTS_Sync"
|
|
|
|
|
|
If rb_SyncFloder_Spicfied.Checked Then lab_SyncPath.Text = tb_SyncFolder_BySelected.Text & "\AUTS_Sync"
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub rb_SyncFloder_Spicfied_CheckedChanged(sender As Object, e As EventArgs) Handles rb_SyncFloder_Spicfied.CheckedChanged
|
|
|
|
|
|
If rb_SyncFloder_FollowRootPath.Checked Then lab_SyncPath.Text = TBoRootPath.Text & "\AUTS_Sync"
|
|
|
|
|
|
If rb_SyncFloder_Spicfied.Checked Then lab_SyncPath.Text = tb_SyncFolder_BySelected.Text & "\AUTS_Sync"
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
|
|
|
|
|
tb_SyncFolder_BySelected.Text = SelectSyncFolderString()
|
|
|
|
|
|
|
|
|
|
|
|
If rb_SyncFloder_FollowRootPath.Checked Then lab_SyncPath.Text = TBoRootPath.Text & "\AUTS_Sync"
|
|
|
|
|
|
If rb_SyncFloder_Spicfied.Checked Then lab_SyncPath.Text = tb_SyncFolder_BySelected.Text & "\AUTS_Sync"
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
End Class
|