├── AutoUpdater.png ├── AutoUpdater ├── l2.ico ├── images │ ├── frame.png │ ├── frame_empty.png │ ├── repair_over.png │ ├── start_over.png │ ├── repair_normal.png │ ├── repair_select.png │ ├── start_normal.png │ ├── start_select.png │ ├── loadingbar_back.png │ ├── loadingbar_fore.png │ ├── loading_seperator.png │ ├── frame_black_background.png │ ├── frames_df_btn_min_over.png │ ├── frames_df_btn_close_normal.png │ ├── frames_df_btn_close_over.png │ ├── frames_df_btn_close_select.png │ ├── frames_df_btn_min_normal.png │ └── frames_df_btn_min_select.png ├── App.config ├── My Project │ ├── Settings.settings │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Application.Designer.vb │ ├── Settings.Designer.vb │ ├── app.manifest │ ├── Resources.Designer.vb │ └── Resources.resx ├── AutoUpdater.vbproj.user ├── ApplicationEvents.vb ├── AutoUpdater.sln ├── README.md ├── app.manifest ├── AutoUpdater.vbproj ├── frmMain.vb └── frmMain.Designer.vb ├── AutoUpdaterPackageCreator.png ├── AutoUpdaterPackageCreator ├── icon.ico ├── App.config ├── My Project │ ├── Settings.settings │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Application.Designer.vb │ ├── Resources.Designer.vb │ ├── Settings.Designer.vb │ └── Resources.resx ├── AutoUpdaterPackageCreator.sln ├── README.md ├── AutoUpdaterPackageCreator.vbproj ├── frmMain.Designer.vb ├── frmMain.vb └── frmMain.resx └── README.md /AutoUpdater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater.png -------------------------------------------------------------------------------- /AutoUpdater/l2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/l2.ico -------------------------------------------------------------------------------- /AutoUpdater/images/frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frame.png -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdaterPackageCreator.png -------------------------------------------------------------------------------- /AutoUpdater/images/frame_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frame_empty.png -------------------------------------------------------------------------------- /AutoUpdater/images/repair_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/repair_over.png -------------------------------------------------------------------------------- /AutoUpdater/images/start_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/start_over.png -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdaterPackageCreator/icon.ico -------------------------------------------------------------------------------- /AutoUpdater/images/repair_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/repair_normal.png -------------------------------------------------------------------------------- /AutoUpdater/images/repair_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/repair_select.png -------------------------------------------------------------------------------- /AutoUpdater/images/start_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/start_normal.png -------------------------------------------------------------------------------- /AutoUpdater/images/start_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/start_select.png -------------------------------------------------------------------------------- /AutoUpdater/images/loadingbar_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/loadingbar_back.png -------------------------------------------------------------------------------- /AutoUpdater/images/loadingbar_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/loadingbar_fore.png -------------------------------------------------------------------------------- /AutoUpdater/images/loading_seperator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/loading_seperator.png -------------------------------------------------------------------------------- /AutoUpdater/images/frame_black_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frame_black_background.png -------------------------------------------------------------------------------- /AutoUpdater/images/frames_df_btn_min_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frames_df_btn_min_over.png -------------------------------------------------------------------------------- /AutoUpdater/images/frames_df_btn_close_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frames_df_btn_close_normal.png -------------------------------------------------------------------------------- /AutoUpdater/images/frames_df_btn_close_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frames_df_btn_close_over.png -------------------------------------------------------------------------------- /AutoUpdater/images/frames_df_btn_close_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frames_df_btn_close_select.png -------------------------------------------------------------------------------- /AutoUpdater/images/frames_df_btn_min_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frames_df_btn_min_normal.png -------------------------------------------------------------------------------- /AutoUpdater/images/frames_df_btn_min_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobiusDevelopment/AutoUpdater/HEAD/AutoUpdater/images/frames_df_btn_min_select.png -------------------------------------------------------------------------------- /AutoUpdater/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | frmMain 5 | false 6 | 0 7 | true 8 | 0 9 | true 10 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | frmMain 5 | false 6 | 0 7 | true 8 | 0 9 | true 10 | -------------------------------------------------------------------------------- /AutoUpdater/AutoUpdater.vbproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /AutoUpdater/ApplicationEvents.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | ' The following events are available for MyApplication: 3 | ' Startup: Raised when the application starts, before the startup form is created. 4 | ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. 5 | ' UnhandledException: Raised if the application encounters an unhandled exception. 6 | ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 7 | ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. 8 | Partial Friend Class MyApplication 9 | End Class 10 | End Namespace 11 | -------------------------------------------------------------------------------- /AutoUpdater/AutoUpdater.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25123.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoUpdater", "AutoUpdater.vbproj", "{44D007BD-A0D2-49C3-8708-E6E6043C2787}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {44D007BD-A0D2-49C3-8708-E6E6043C2787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {44D007BD-A0D2-49C3-8708-E6E6043C2787}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {44D007BD-A0D2-49C3-8708-E6E6043C2787}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {44D007BD-A0D2-49C3-8708-E6E6043C2787}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/AutoUpdaterPackageCreator.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25123.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoUpdaterPackageCreator", "AutoUpdaterPackageCreator.vbproj", "{15356CA9-D245-409B-8B54-AF2287C82341}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {15356CA9-D245-409B-8B54-AF2287C82341}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {15356CA9-D245-409B-8B54-AF2287C82341}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {15356CA9-D245-409B-8B54-AF2287C82341}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {15356CA9-D245-409B-8B54-AF2287C82341}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' General Information about an assembly is controlled through the following 6 | ' set of attributes. Change these attribute values to modify the information 7 | ' associated with an assembly. 8 | 9 | ' Review the values of the assembly attributes 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 21 | 22 | 23 | ' Version information for an assembly consists of the following four values: 24 | ' 25 | ' Major Version 26 | ' Minor Version 27 | ' Build Number 28 | ' Revision 29 | ' 30 | ' You can specify all the values or you can default the Build and Revision Numbers 31 | ' by using the '*' as shown below: 32 | ' 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' General Information about an assembly is controlled through the following 6 | ' set of attributes. Change these attribute values to modify the information 7 | ' associated with an assembly. 8 | 9 | ' Review the values of the assembly attributes 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 21 | 22 | 23 | ' Version information for an assembly consists of the following four values: 24 | ' 25 | ' Major Version 26 | ' Minor Version 27 | ' Build Number 28 | ' Revision 29 | ' 30 | ' You can specify all the values or you can default the Build and Revision Numbers 31 | ' by using the '*' as shown below: 32 | ' 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AutoUpdater Project 2 | 3 | 4 | Welcome to the AutoUpdater Project! This repository contains two main components: 5 | 6 | 1. **AutoUpdater**: A tool for updating software by downloading and installing the latest files from a web server. 7 | 2. **AutoUpdatePackageCreator**: A utility for creating update packages, which can then be used by the AutoUpdater. 8 | 9 | Both tools are designed to work together to provide a seamless update experience for software applications. 10 | 11 | ## Components 12 | 13 | ### AutoUpdater 14 | The AutoUpdater is a client-side application that checks for, downloads, and installs updates from a specified server. 15 | 16 | - [View AutoUpdater README](AutoUpdater/README.md) 17 | 18 | ### AutoUpdaterPackageCreator 19 | The AutoUpdaterPackageCreator is a tool for creating update packages.
20 | These packages are then used by the AutoUpdater to update software applications. 21 | 22 | - [View AutoUpdaterPackageCreator README](AutoUpdaterPackageCreator/README.md) 23 | 24 | ## Getting Started 25 | To get started with the AutoUpdater project, you will need to clone this repository and then navigate to each tool's respective directory to read their specific `README.md` for detailed instructions and configurations.
26 | Thank you for your interest in the AutoUpdater project! 27 | 28 | --- 29 | AutoUpdater Project - Streamlining the software update process. 30 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | 'NOTE: This file is auto-generated; do not modify it directly. To make changes, 18 | ' or if you encounter build errors in this file, go to the Project Designer 19 | ' (go to Project Properties or double-click the My Project node in 20 | ' Solution Explorer), and make changes on the Application tab. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = false 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.AutoUpdater.frmMain 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | 'NOTE: This file is auto-generated; do not modify it directly. To make changes, 18 | ' or if you encounter build errors in this file, go to the Project Designer 19 | ' (go to Project Properties or double-click the My Project node in 20 | ' Solution Explorer), and make changes on the Application tab. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = false 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.AutoUpdaterPackageCreator.frmMain 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /AutoUpdater/README.md: -------------------------------------------------------------------------------- 1 | # AutoUpdater 2 | 3 | 4 | ## Overview 5 | AutoUpdater is a VB.NET application designed to automatically update software by downloading and installing the latest files from a web server. It checks for updates, downloads necessary files, and maintains the software at the latest version. 6 | 7 | ## Features 8 | - Automatic detection of new updates based on version comparison. 9 | - Download and installation of updates from a specified web server. 10 | - Progress indication during updates. 11 | - Self-update capability for the AutoUpdater application. 12 | - Support for transparent backgrounds and custom UI elements. 13 | 14 | ## Installation 15 | The only thing you need to do is open AutoUpdater.sln with Visual Studio and hit F5 to run it.
16 | No specific installation process required. The application runs directly from the executable in the Windows environment. 17 | 18 | ## Configuration 19 | Before using AutoUpdater, ensure the following variables are set correctly in the code: 20 | 21 | - `gameServerIP`: The IP address of the game server (if applicable). 22 | - `baseURL`: The URL where the update files are hosted. 23 | - `downloadFolderName`: The name of the temporary folder for storing downloaded files. 24 | - `pakFolderName`: The folder on the server where package files are stored. 25 | - `pakExtension`: The extension of the package files (typically `.zip`). 26 | - `enableBrowser`: Boolean to enable or disable the in-built web browser. 27 | - `browserURL`: The URL to display in the in-built web browser (if enabled). 28 | 29 | These settings are crucial for the proper operation of the AutoUpdater. 30 | 31 | ## Usage 32 | 1. **Run AutoUpdater:** Launch the application. 33 | 2. **Automatic Update Check:** On load, AutoUpdater will check for updates. If an update is found, it will automatically start downloading. 34 | 3. **Progress Display:** During the update, the progress is displayed on the UI. 35 | 4. **Completion:** Once the updates are downloaded and installed, the application is up-to-date. 36 | 37 | ### Manual Update Trigger 38 | - Use the "Repair Files" button to manually trigger an update check and process. 39 | 40 | ### Self-update 41 | If an update for the AutoUpdater itself is detected, it will self-update and restart. 42 | 43 | --- 44 | AutoUpdater - Keeping your software up-to-date effortlessly. 45 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AutoUpdaterPackageCreator.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | End Module 63 | End Namespace 64 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.AutoUpdater.My.MySettings 68 | Get 69 | Return Global.AutoUpdater.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.AutoUpdaterPackageCreator.My.MySettings 68 | Get 69 | Return Global.AutoUpdaterPackageCreator.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /AutoUpdater/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/README.md: -------------------------------------------------------------------------------- 1 | # AutoUpdater Package Creator 2 | 3 | 4 | ## Overview 5 | AutoUpdaterPackageCreator is a VB.NET application designed to facilitate the creation of update packages. It generates individual ZIP files for each file in a source directory, maintaining the original directory structure, and creates `version.txt` and `filelist.txt` for version tracking and SHA256 hashes of the files, respectively. 6 | 7 | ## Features 8 | - Easy selection of source and output directories. 9 | - Version number entry for package tracking. 10 | - Automated generation of `version.txt` and `filelist.txt`. 11 | - ZIP file creation for each file in the source directory, preserving directory structure. 12 | - SHA256 hash generation for file integrity verification. 13 | 14 | ## Installation 15 | The only thing you need to do is open AutoUpdaterPackageCreator.sln with Visual Studio and hit F5 to run it.
16 | No specific installation process required. The application runs directly from the executable in the Windows environment. 17 | 18 | ## Usage 19 | 1. **Select Source Folder:** Click on the related `Select` button to choose the source directory containing the files for packaging. 20 | 2. **Select Output Folder:** Click on the related `Select` button to define the destination directory for the generated packages. 21 | 3. **Version Input:** Enter the version number in `Version` textbox. This will be used in `version.txt`. 22 | 4. **Generate Packages:** Press `Generate` to initiate the packaging process. 23 | 24 | ## Detailed Functionality 25 | - **Folder Checks:** Ensures the selected source and output folders meet the necessary conditions (non-empty source, empty destination). 26 | - **Version Input Restriction:** Only numeric inputs allowed for version number. 27 | - **File Processing:** Processes files in the source directory recursively, computes SHA256 hashes, and packages them into ZIP files. 28 | - **Progress Tracking:** Utilizes a progress bar to display progress. 29 | - **Error Handling:** Provides user alerts for issues related to folder selection or file processing. 30 | 31 | 32 | ## File Handling and Deployment 33 | 34 | ### Generated Files 35 | AutoUpdaterPackageCreator generates several files during its operation: 36 | - `version.txt`: Contains the version number of the package. 37 | - `filelist.txt`: Lists all files with their respective SHA256 hashes. 38 | - Individual `.zip` files for each item in the source directory, preserving the directory structure. 39 | 40 | ### Moving Generated Files 41 | Once the packaging process is complete, the generated files are found in the specified output folder. These files include the `version.txt`, `filelist.txt`, and a `zips` folder containing ZIP files for each item. 42 | 43 | To deploy these files for an update mechanism, follow these steps: 44 | 45 | 1. **Web Server Setup:** Ensure you have a web server configured to serve files. In the provided code, the base URL is set as `"http://127.0.0.1/updater/"`. Adjust this to your actual server's URL. 46 | 47 | 2. **Upload Files:** 48 | - Upload the `version.txt` and `filelist.txt` directly to the root of the designated path on your web server (e.g., `http://yourserver.com/updater/`). 49 | - Upload the contents of the `zips` folder to a subdirectory on your web server, typically named `zips` (e.g., `http://yourserver.com/updater/zips/`). 50 | 51 | 3. **Client Application Configuration:** 52 | - The client application should be configured to check for updates from your web server. This is typically done by setting the `baseURL` in the application to match your web server's URL. 53 | 54 | ### Note 55 | Ensure that the web server's directory structure matches the expected paths set in the application code. For example, if your application expects `version.txt` at `http://yourserver.com/updater/version.txt`, it should be placed accordingly on the server. 56 | 57 | --- 58 | AutoUpdater Package Creator - Automating package creation with ease and reliability. -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/AutoUpdaterPackageCreator.vbproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {15356CA9-D245-409B-8B54-AF2287C82341} 8 | WinExe 9 | AutoUpdaterPackageCreator.My.MyApplication 10 | AutoUpdaterPackageCreator 11 | AutoUpdater Package Creator 12 | 512 13 | WindowsForms 14 | v4.5 15 | true 16 | 17 | 18 | 19 | AnyCPU 20 | true 21 | full 22 | true 23 | true 24 | bin\Debug\ 25 | AutoUpdater Package Creator.xml 26 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 27 | false 28 | 29 | 30 | AnyCPU 31 | pdbonly 32 | false 33 | true 34 | true 35 | bin\Release\ 36 | AutoUpdater Package Creator.xml 37 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 38 | false 39 | 40 | 41 | On 42 | 43 | 44 | Binary 45 | 46 | 47 | Off 48 | 49 | 50 | On 51 | 52 | 53 | icon.ico 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | Form 85 | 86 | 87 | frmMain.vb 88 | Form 89 | 90 | 91 | 92 | True 93 | Application.myapp 94 | 95 | 96 | True 97 | True 98 | Resources.resx 99 | 100 | 101 | True 102 | Settings.settings 103 | True 104 | 105 | 106 | 107 | 108 | frmMain.vb 109 | 110 | 111 | VbMyResourcesResXFileCodeGenerator 112 | Resources.Designer.vb 113 | My.Resources 114 | Designer 115 | 116 | 117 | 118 | 119 | MyApplicationCodeGenerator 120 | Application.Designer.vb 121 | 122 | 123 | SettingsSingleFileGenerator 124 | My 125 | Settings.Designer.vb 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 140 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/frmMain.Designer.vb: -------------------------------------------------------------------------------- 1 | _ 2 | Partial Class frmMain 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) 26 | Me.lblSource = New System.Windows.Forms.Label() 27 | Me.lblOutput = New System.Windows.Forms.Label() 28 | Me.txtSource = New System.Windows.Forms.TextBox() 29 | Me.txtOutput = New System.Windows.Forms.TextBox() 30 | Me.btnSourceSelect = New System.Windows.Forms.Button() 31 | Me.btnOutputSelect = New System.Windows.Forms.Button() 32 | Me.btnGenerate = New System.Windows.Forms.Button() 33 | Me.txtVersion = New System.Windows.Forms.TextBox() 34 | Me.lblVersion = New System.Windows.Forms.Label() 35 | Me.MyProgressBar = New System.Windows.Forms.ProgressBar() 36 | Me.SuspendLayout() 37 | ' 38 | 'lblSource 39 | ' 40 | Me.lblSource.AutoSize = True 41 | Me.lblSource.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 42 | Me.lblSource.Location = New System.Drawing.Point(12, 22) 43 | Me.lblSource.Name = "lblSource" 44 | Me.lblSource.Size = New System.Drawing.Size(80, 25) 45 | Me.lblSource.TabIndex = 0 46 | Me.lblSource.Text = "Source" 47 | ' 48 | 'lblOutput 49 | ' 50 | Me.lblOutput.AutoSize = True 51 | Me.lblOutput.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 52 | Me.lblOutput.Location = New System.Drawing.Point(12, 59) 53 | Me.lblOutput.Name = "lblOutput" 54 | Me.lblOutput.Size = New System.Drawing.Size(76, 25) 55 | Me.lblOutput.TabIndex = 1 56 | Me.lblOutput.Text = "Output" 57 | ' 58 | 'txtSource 59 | ' 60 | Me.txtSource.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 61 | Me.txtSource.Location = New System.Drawing.Point(103, 20) 62 | Me.txtSource.Name = "txtSource" 63 | Me.txtSource.Size = New System.Drawing.Size(462, 29) 64 | Me.txtSource.TabIndex = 1 65 | ' 66 | 'txtOutput 67 | ' 68 | Me.txtOutput.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 69 | Me.txtOutput.Location = New System.Drawing.Point(103, 57) 70 | Me.txtOutput.Name = "txtOutput" 71 | Me.txtOutput.Size = New System.Drawing.Size(462, 29) 72 | Me.txtOutput.TabIndex = 3 73 | ' 74 | 'btnSourceSelect 75 | ' 76 | Me.btnSourceSelect.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 77 | Me.btnSourceSelect.Location = New System.Drawing.Point(571, 19) 78 | Me.btnSourceSelect.Name = "btnSourceSelect" 79 | Me.btnSourceSelect.Size = New System.Drawing.Size(101, 31) 80 | Me.btnSourceSelect.TabIndex = 2 81 | Me.btnSourceSelect.Text = "Select" 82 | Me.btnSourceSelect.UseVisualStyleBackColor = True 83 | ' 84 | 'btnOutputSelect 85 | ' 86 | Me.btnOutputSelect.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 87 | Me.btnOutputSelect.Location = New System.Drawing.Point(571, 56) 88 | Me.btnOutputSelect.Name = "btnOutputSelect" 89 | Me.btnOutputSelect.Size = New System.Drawing.Size(101, 31) 90 | Me.btnOutputSelect.TabIndex = 4 91 | Me.btnOutputSelect.Text = "Select" 92 | Me.btnOutputSelect.UseVisualStyleBackColor = True 93 | ' 94 | 'btnGenerate 95 | ' 96 | Me.btnGenerate.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 97 | Me.btnGenerate.Location = New System.Drawing.Point(517, 147) 98 | Me.btnGenerate.Name = "btnGenerate" 99 | Me.btnGenerate.Size = New System.Drawing.Size(155, 62) 100 | Me.btnGenerate.TabIndex = 6 101 | Me.btnGenerate.Text = "Generate" 102 | Me.btnGenerate.UseVisualStyleBackColor = True 103 | ' 104 | 'txtVersion 105 | ' 106 | Me.txtVersion.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 107 | Me.txtVersion.Location = New System.Drawing.Point(103, 103) 108 | Me.txtVersion.MaxLength = 10 109 | Me.txtVersion.Name = "txtVersion" 110 | Me.txtVersion.Size = New System.Drawing.Size(58, 29) 111 | Me.txtVersion.TabIndex = 5 112 | Me.txtVersion.Text = "1" 113 | ' 114 | 'lblVersion 115 | ' 116 | Me.lblVersion.AutoSize = True 117 | Me.lblVersion.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 118 | Me.lblVersion.Location = New System.Drawing.Point(12, 105) 119 | Me.lblVersion.Name = "lblVersion" 120 | Me.lblVersion.Size = New System.Drawing.Size(85, 25) 121 | Me.lblVersion.TabIndex = 7 122 | Me.lblVersion.Text = "Version" 123 | ' 124 | 'MyProgressBar 125 | ' 126 | Me.MyProgressBar.Location = New System.Drawing.Point(17, 147) 127 | Me.MyProgressBar.Name = "MyProgressBar" 128 | Me.MyProgressBar.Size = New System.Drawing.Size(490, 62) 129 | Me.MyProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous 130 | Me.MyProgressBar.TabIndex = 8 131 | ' 132 | 'frmMain 133 | ' 134 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 135 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 136 | Me.ClientSize = New System.Drawing.Size(684, 227) 137 | Me.Controls.Add(Me.MyProgressBar) 138 | Me.Controls.Add(Me.lblVersion) 139 | Me.Controls.Add(Me.txtVersion) 140 | Me.Controls.Add(Me.btnGenerate) 141 | Me.Controls.Add(Me.btnOutputSelect) 142 | Me.Controls.Add(Me.btnSourceSelect) 143 | Me.Controls.Add(Me.txtOutput) 144 | Me.Controls.Add(Me.txtSource) 145 | Me.Controls.Add(Me.lblOutput) 146 | Me.Controls.Add(Me.lblSource) 147 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle 148 | Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) 149 | Me.MaximizeBox = False 150 | Me.MinimizeBox = False 151 | Me.Name = "frmMain" 152 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen 153 | Me.Text = "AutoUpdater - Package Creator" 154 | Me.ResumeLayout(False) 155 | Me.PerformLayout() 156 | 157 | End Sub 158 | 159 | Friend WithEvents lblSource As Label 160 | Friend WithEvents lblOutput As Label 161 | Friend WithEvents txtSource As TextBox 162 | Friend WithEvents txtOutput As TextBox 163 | Friend WithEvents btnSourceSelect As Button 164 | Friend WithEvents btnOutputSelect As Button 165 | Friend WithEvents btnGenerate As Button 166 | Friend WithEvents txtVersion As TextBox 167 | Friend WithEvents lblVersion As Label 168 | Friend WithEvents MyProgressBar As ProgressBar 169 | End Class 170 | -------------------------------------------------------------------------------- /AutoUpdater/AutoUpdater.vbproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {44D007BD-A0D2-49C3-8708-E6E6043C2787} 8 | WinExe 9 | AutoUpdater.My.MyApplication 10 | AutoUpdater 11 | AutoUpdater 12 | 512 13 | WindowsForms 14 | v4.5 15 | true 16 | 17 | false 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.0.0.%2a 30 | false 31 | true 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | true 38 | true 39 | bin\Debug\ 40 | AutoUpdater.xml 41 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 42 | false 43 | 44 | 45 | AnyCPU 46 | pdbonly 47 | false 48 | true 49 | true 50 | bin\Release\ 51 | AutoUpdater.xml 52 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 53 | false 54 | 55 | 56 | On 57 | 58 | 59 | Binary 60 | 61 | 62 | Off 63 | 64 | 65 | On 66 | 67 | 68 | app.manifest 69 | 70 | 71 | l2.ico 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | Form 104 | 105 | 106 | frmMain.vb 107 | Form 108 | 109 | 110 | 111 | True 112 | Application.myapp 113 | 114 | 115 | True 116 | True 117 | Resources.resx 118 | 119 | 120 | True 121 | Settings.settings 122 | True 123 | 124 | 125 | 126 | 127 | frmMain.vb 128 | 129 | 130 | VbMyResourcesResXFileCodeGenerator 131 | My.Resources 132 | Designer 133 | Resources.Designer.vb 134 | 135 | 136 | 137 | 138 | 139 | 140 | MyApplicationCodeGenerator 141 | Application.Designer.vb 142 | 143 | 144 | SettingsSingleFileGenerator 145 | My 146 | Settings.Designer.vb 147 | 148 | 149 | Designer 150 | 151 | 152 | 153 | 154 | False 155 | Microsoft .NET Framework 4.5 %28x86 and x64%29 156 | true 157 | 158 | 159 | False 160 | .NET Framework 3.5 SP1 161 | false 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 192 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/frmMain.vb: -------------------------------------------------------------------------------- 1 | Imports System.IO 2 | Imports System.IO.Compression 3 | Imports System.Security.Cryptography 4 | 5 | Public Class frmMain 6 | Dim messageTitle As String = "Package Creator" 7 | Dim pakFolderName As String = "zips" 8 | Dim pakExtension As String = ".zip" 9 | 10 | Private Sub btnSourceSelect_Click(sender As Object, e As EventArgs) Handles btnSourceSelect.Click 11 | Dim dialog = New FolderBrowserDialog() 12 | dialog.SelectedPath = Application.StartupPath 13 | If DialogResult.OK = dialog.ShowDialog() Then 14 | 'Check if folder is empty 15 | Dim myDir As DirectoryInfo = New DirectoryInfo(dialog.SelectedPath) 16 | If Not myDir.EnumerateFiles().Any() And Not myDir.EnumerateDirectories().Any() Then 17 | MsgBox("Folder is empty!", MsgBoxStyle.Information, messageTitle) 18 | Exit Sub 19 | End If 20 | txtSource.Text = dialog.SelectedPath 21 | End If 22 | End Sub 23 | 24 | Private Sub btnOutputSelect_Click(sender As Object, e As EventArgs) Handles btnOutputSelect.Click 25 | Dim dialog = New FolderBrowserDialog() 26 | dialog.SelectedPath = Application.StartupPath 27 | If DialogResult.OK = dialog.ShowDialog() Then 28 | 'Check if folder is empty 29 | Dim myDir As DirectoryInfo = New DirectoryInfo(dialog.SelectedPath) 30 | If myDir.EnumerateFiles().Any() Or myDir.EnumerateDirectories().Any() Then 31 | MsgBox("Folder is not empty!", MsgBoxStyle.Information, messageTitle) 32 | Exit Sub 33 | End If 34 | txtOutput.Text = dialog.SelectedPath 35 | End If 36 | End Sub 37 | 38 | Private Sub txtVersion_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtVersion.KeyPress 39 | If Asc(e.KeyChar) <> 8 Then 'backspace 40 | If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then 'numbers 41 | e.Handled = True 42 | End If 43 | End If 44 | End Sub 45 | 46 | Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click 47 | 'Check for empty values 48 | If txtSource.Text = "" Then 49 | MsgBox("Source folder is not set!", MsgBoxStyle.Information, messageTitle) 50 | Exit Sub 51 | End If 52 | If txtOutput.Text = "" Then 53 | MsgBox("Output folder is not set!", MsgBoxStyle.Information, messageTitle) 54 | Exit Sub 55 | End If 56 | If txtVersion.Text = "" Then 57 | MsgBox("Version is not set!", MsgBoxStyle.Information, messageTitle) 58 | Exit Sub 59 | End If 60 | 61 | 'Check if folders exist 62 | If (Not Directory.Exists(txtSource.Text)) Then 63 | MsgBox("Folder " + txtSource.Text + " not found!", MsgBoxStyle.Information, messageTitle) 64 | Exit Sub 65 | End If 66 | If (Not Directory.Exists(txtOutput.Text)) Then 67 | MsgBox("Folder " + txtOutput.Text + " not found!", MsgBoxStyle.Information, messageTitle) 68 | Exit Sub 69 | End If 70 | 71 | 'Check if source folder is empty 72 | Dim mySourceDir As DirectoryInfo = New DirectoryInfo(txtSource.Text) 73 | If Not mySourceDir.EnumerateFiles().Any() And Not mySourceDir.EnumerateDirectories().Any() Then 74 | MsgBox("Source folder is empty!", MsgBoxStyle.Information, messageTitle) 75 | Exit Sub 76 | End If 77 | 'Check if output folder is empty 78 | Dim myOutputDir As DirectoryInfo = New DirectoryInfo(txtOutput.Text) 79 | If myOutputDir.EnumerateFiles().Any() Or myOutputDir.EnumerateDirectories().Any() Then 80 | MsgBox("Output folder is not empty!", MsgBoxStyle.Information, messageTitle) 81 | Exit Sub 82 | End If 83 | 84 | 'Lock controls 85 | txtSource.TabStop = False 86 | txtOutput.TabStop = False 87 | txtVersion.TabStop = False 88 | txtSource.Enabled = False 89 | txtOutput.Enabled = False 90 | txtVersion.Enabled = False 91 | btnSourceSelect.Enabled = False 92 | btnOutputSelect.Enabled = False 93 | btnGenerate.Enabled = False 94 | 95 | Call New Action(AddressOf generatefiles).BeginInvoke(Nothing, Me) 96 | End Sub 97 | 98 | Private Sub generatefiles() 99 | 'Replace unessasary "\" from end of folder paths 100 | Dim mySourcePath As String = txtSource.Text 101 | Dim myOutputPath As String = txtOutput.Text 102 | If Mid(txtSource.Text, txtSource.Text.Length, 1).Equals("\") Then 103 | mySourcePath = Mid(txtSource.Text, 1, txtSource.Text.Length - 1) 104 | End If 105 | If Mid(txtOutput.Text, txtOutput.Text.Length, 1).Equals("\") Then 106 | myOutputPath = Mid(txtOutput.Text, 1, txtOutput.Text.Length - 1) 107 | End If 108 | 109 | 'Create version.ini file 110 | Using outputFile As StreamWriter = New StreamWriter(myOutputPath + "\version.txt", False, System.Text.Encoding.Unicode) 111 | outputFile.Write(txtVersion.Text) 112 | outputFile.Close() 113 | End Using 114 | 'Generate the list of package files 115 | Dim myFileList As List(Of String) = getFilesRecursive(mySourcePath) 116 | 117 | 'Set the progressbar maximum 118 | MyProgressBar.Maximum = myFileList.Count + 1 119 | MyProgressBar.Value = 1 120 | 121 | 'Create filelist.ini file 122 | Using outputFile As StreamWriter = New StreamWriter(myOutputPath + "\filelist.txt", False, System.Text.Encoding.Unicode) 123 | For Each path In myFileList 124 | outputFile.WriteLine(getFileHash(path) + vbTab + getRelativePath(mySourcePath, path)) 125 | Next 126 | outputFile.Close() 127 | End Using 128 | 129 | 'Create seperate zip files 130 | Dim relativePath As String 131 | Dim outputPath As String 132 | Dim fileCounter As Integer = 1 133 | For Each path In myFileList 134 | 'Increase file counter by 1 135 | fileCounter = fileCounter + 1 136 | 137 | 'Check if output path exists 138 | relativePath = getRelativePath(mySourcePath, path) 139 | If relativePath.Contains("\") Then 140 | outputPath = myOutputPath + "\" + pakFolderName + "\" + Mid(relativePath, 1, relativePath.LastIndexOf("\")) 141 | Else 142 | outputPath = myOutputPath + "\" + pakFolderName 143 | End If 144 | If (Not Directory.Exists(outputPath)) Then 145 | Directory.CreateDirectory(outputPath) 146 | End If 147 | 148 | 'Create the zip file 149 | Using zipArchive As ZipArchive = ZipFile.Open(myOutputPath + "\" + pakFolderName + "\" + relativePath + pakExtension, ZipArchiveMode.Create) 150 | MyProgressBar.Value = fileCounter 151 | zipArchive.CreateEntryFromFile(path, relativePath) 152 | End Using 153 | Next 154 | 155 | 'Unlock controls 156 | txtSource.TabStop = True 157 | txtOutput.TabStop = True 158 | txtVersion.TabStop = True 159 | txtSource.Enabled = True 160 | txtOutput.Enabled = True 161 | txtVersion.Enabled = True 162 | btnSourceSelect.Enabled = True 163 | btnOutputSelect.Enabled = True 164 | btnGenerate.Enabled = True 165 | 166 | 'Finish message 167 | MsgBox("Operation has completed!", MsgBoxStyle.Information, messageTitle) 168 | 'Reset progress bar 169 | MyProgressBar.Value = 0 170 | End Sub 171 | 172 | Private Function getFilesRecursive(ByVal initial As String) As List(Of String) 173 | Dim result As New List(Of String) 'This list stores the results 174 | Dim stack As New Stack(Of String) 'This stack stores the directories to process 175 | stack.Push(initial) 'Add the initial directory 176 | 177 | 'Continue processing for each stacked directory 178 | Do While (stack.Count > 0) 179 | Dim dir As String = stack.Pop 'Get top directory string 180 | Try 181 | result.AddRange(Directory.GetFiles(dir, "*.*")) 'Add all immediate file paths 182 | 183 | 'Loop through all subdirectories and add them to the stack 184 | Dim directoryName As String 185 | For Each directoryName In Directory.GetDirectories(dir) 186 | stack.Push(directoryName) 187 | Next 188 | Catch ex As Exception 189 | 'Empty 190 | End Try 191 | Loop 192 | 193 | Return result 194 | End Function 195 | 196 | Private Function getRelativePath(sourcePath As String, fullPath As String) As String 197 | sourcePath += "\" 198 | Return Mid(fullPath, sourcePath.Length + 1, (fullPath.Length - sourcePath.Length) + 1) 199 | End Function 200 | 201 | Private Function getFileHash(ByVal fileName As String) 202 | Dim hash = SHA256.Create() 'Initializes a SHA-256 hash object 203 | Dim hashValue() As Byte 204 | 205 | 'Read the file 206 | Dim fileStream As FileStream = File.OpenRead(fileName) 207 | fileStream.Position = 0 208 | hashValue = hash.ComputeHash(fileStream) 209 | fileStream.Close() 210 | 211 | 'The array of bytes is converted into hexadecimal string 212 | Dim hashHex As String = "" 213 | Dim counter As Integer 214 | For counter = 0 To hashValue.Length - 1 215 | hashHex += hashValue(counter).ToString("X2") 'Convert each byte in hexadecimal 216 | Next counter 217 | 218 | 'Hash is returned in lowercase 219 | Return hashHex.ToLower 220 | End Function 221 | End Class 222 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AutoUpdater.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | 63 | ''' 64 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 65 | ''' 66 | Friend ReadOnly Property frame_black_background() As System.Drawing.Bitmap 67 | Get 68 | Dim obj As Object = ResourceManager.GetObject("frame_black_background", resourceCulture) 69 | Return CType(obj,System.Drawing.Bitmap) 70 | End Get 71 | End Property 72 | 73 | ''' 74 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 75 | ''' 76 | Friend ReadOnly Property frames_df_btn_close_normal() As System.Drawing.Bitmap 77 | Get 78 | Dim obj As Object = ResourceManager.GetObject("frames_df_btn_close_normal", resourceCulture) 79 | Return CType(obj,System.Drawing.Bitmap) 80 | End Get 81 | End Property 82 | 83 | ''' 84 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 85 | ''' 86 | Friend ReadOnly Property frames_df_btn_close_over() As System.Drawing.Bitmap 87 | Get 88 | Dim obj As Object = ResourceManager.GetObject("frames_df_btn_close_over", resourceCulture) 89 | Return CType(obj,System.Drawing.Bitmap) 90 | End Get 91 | End Property 92 | 93 | ''' 94 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 95 | ''' 96 | Friend ReadOnly Property frames_df_btn_close_select() As System.Drawing.Bitmap 97 | Get 98 | Dim obj As Object = ResourceManager.GetObject("frames_df_btn_close_select", resourceCulture) 99 | Return CType(obj,System.Drawing.Bitmap) 100 | End Get 101 | End Property 102 | 103 | ''' 104 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 105 | ''' 106 | Friend ReadOnly Property frames_df_btn_min_normal() As System.Drawing.Bitmap 107 | Get 108 | Dim obj As Object = ResourceManager.GetObject("frames_df_btn_min_normal", resourceCulture) 109 | Return CType(obj,System.Drawing.Bitmap) 110 | End Get 111 | End Property 112 | 113 | ''' 114 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 115 | ''' 116 | Friend ReadOnly Property frames_df_btn_min_over() As System.Drawing.Bitmap 117 | Get 118 | Dim obj As Object = ResourceManager.GetObject("frames_df_btn_min_over", resourceCulture) 119 | Return CType(obj,System.Drawing.Bitmap) 120 | End Get 121 | End Property 122 | 123 | ''' 124 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 125 | ''' 126 | Friend ReadOnly Property frames_df_btn_min_select() As System.Drawing.Bitmap 127 | Get 128 | Dim obj As Object = ResourceManager.GetObject("frames_df_btn_min_select", resourceCulture) 129 | Return CType(obj,System.Drawing.Bitmap) 130 | End Get 131 | End Property 132 | 133 | ''' 134 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 135 | ''' 136 | Friend ReadOnly Property loading_seperator() As System.Drawing.Bitmap 137 | Get 138 | Dim obj As Object = ResourceManager.GetObject("loading_seperator", resourceCulture) 139 | Return CType(obj,System.Drawing.Bitmap) 140 | End Get 141 | End Property 142 | 143 | ''' 144 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 145 | ''' 146 | Friend ReadOnly Property loadingbar_back() As System.Drawing.Bitmap 147 | Get 148 | Dim obj As Object = ResourceManager.GetObject("loadingbar_back", resourceCulture) 149 | Return CType(obj,System.Drawing.Bitmap) 150 | End Get 151 | End Property 152 | 153 | ''' 154 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 155 | ''' 156 | Friend ReadOnly Property loadingbar_fore() As System.Drawing.Bitmap 157 | Get 158 | Dim obj As Object = ResourceManager.GetObject("loadingbar_fore", resourceCulture) 159 | Return CType(obj,System.Drawing.Bitmap) 160 | End Get 161 | End Property 162 | 163 | ''' 164 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 165 | ''' 166 | Friend ReadOnly Property repair_normal() As System.Drawing.Bitmap 167 | Get 168 | Dim obj As Object = ResourceManager.GetObject("repair_normal", resourceCulture) 169 | Return CType(obj,System.Drawing.Bitmap) 170 | End Get 171 | End Property 172 | 173 | ''' 174 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 175 | ''' 176 | Friend ReadOnly Property repair_over() As System.Drawing.Bitmap 177 | Get 178 | Dim obj As Object = ResourceManager.GetObject("repair_over", resourceCulture) 179 | Return CType(obj,System.Drawing.Bitmap) 180 | End Get 181 | End Property 182 | 183 | ''' 184 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 185 | ''' 186 | Friend ReadOnly Property repair_select() As System.Drawing.Bitmap 187 | Get 188 | Dim obj As Object = ResourceManager.GetObject("repair_select", resourceCulture) 189 | Return CType(obj,System.Drawing.Bitmap) 190 | End Get 191 | End Property 192 | 193 | ''' 194 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 195 | ''' 196 | Friend ReadOnly Property start_normal() As System.Drawing.Bitmap 197 | Get 198 | Dim obj As Object = ResourceManager.GetObject("start_normal", resourceCulture) 199 | Return CType(obj,System.Drawing.Bitmap) 200 | End Get 201 | End Property 202 | 203 | ''' 204 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 205 | ''' 206 | Friend ReadOnly Property start_over() As System.Drawing.Bitmap 207 | Get 208 | Dim obj As Object = ResourceManager.GetObject("start_over", resourceCulture) 209 | Return CType(obj,System.Drawing.Bitmap) 210 | End Get 211 | End Property 212 | 213 | ''' 214 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 215 | ''' 216 | Friend ReadOnly Property start_select() As System.Drawing.Bitmap 217 | Get 218 | Dim obj As Object = ResourceManager.GetObject("start_select", resourceCulture) 219 | Return CType(obj,System.Drawing.Bitmap) 220 | End Get 221 | End Property 222 | End Module 223 | End Namespace 224 | -------------------------------------------------------------------------------- /AutoUpdater/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\images\frame_black_background.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\images\frames_df_btn_close_normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\images\frames_df_btn_close_over.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\images\frames_df_btn_close_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\images\frames_df_btn_min_normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\images\frames_df_btn_min_over.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\images\frames_df_btn_min_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | ..\images\loading_seperator.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 144 | 145 | 146 | ..\images\loadingbar_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 147 | 148 | 149 | ..\images\loadingbar_fore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 150 | 151 | 152 | ..\images\repair_normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 153 | 154 | 155 | ..\images\repair_over.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 156 | 157 | 158 | ..\images\repair_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 159 | 160 | 161 | ..\images\start_normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 162 | 163 | 164 | ..\images\start_over.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 165 | 166 | 167 | ..\images\start_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 168 | 169 | -------------------------------------------------------------------------------- /AutoUpdater/frmMain.vb: -------------------------------------------------------------------------------- 1 | Imports System.IO 2 | Imports System.IO.Compression 3 | Imports System.Net 4 | Imports System.Security.Cryptography 5 | Imports System.Text.RegularExpressions 6 | 7 | Public Class frmMain 8 | Dim gameServerIP = "127.0.0.1" 9 | Dim baseURL As String = "http://127.0.0.1/updater/" 'Where the files are saved 10 | Dim versionFileURL As String = baseURL + "version.txt" 11 | Dim fileListURL As String = baseURL + "filelist.txt" 12 | Dim downloadFolderName As String = "$Patch$" 13 | Dim pakFolderName As String = "zips" 14 | Dim pakExtension As String = ".zip" 15 | Dim enableBrowser As Boolean = True 16 | Dim enableBrowserScrollbars As Boolean = False 17 | Dim browserURL As String = "http://127.0.0.1/news/" 18 | Dim launcherLocalVersion As Integer = 0 19 | Dim launcherWebVersion As Integer = 0 20 | Dim myStartupPath As String 21 | Dim myFileName As String 22 | Dim progressBarCounter As Integer 23 | Dim progressBarCounterMax As Integer 24 | Dim progressText As String 25 | Dim updating = False 26 | 'For debugging 27 | Dim disableSelfUpdates As Boolean = False 28 | 29 | Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load 30 | 'Set transparent form background 31 | SetStyle(ControlStyles.SupportsTransparentBackColor, True) 32 | Me.BackColor = Color.Black 33 | Me.TransparencyKey = Color.Black 34 | 35 | 'Get application startup path 36 | Dim myPath As String = Application.StartupPath 37 | myStartupPath = myPath + "\" 38 | myFileName = Path.GetFileName(Application.ExecutablePath) 39 | 40 | 'Self-update check 41 | If myFileName.EndsWith("_") Then 42 | Threading.Thread.Sleep(2000) 'Try to delay 2 seconds 43 | Dim parentPath As String = Mid(myPath, 1, myPath.LastIndexOf("\")) 44 | Dim parentPathFileName As String = Mid(myFileName, 1, myFileName.Length - 1) 45 | File.Copy(myStartupPath + myFileName, parentPath + "\" + parentPathFileName, True) 46 | Shell(parentPath + "\" + parentPathFileName, vbNormalFocus) 47 | End 48 | End If 49 | 50 | 'Check if we have access over http 51 | If enableBrowser And checkAddress(browserURL) Then 52 | MyWebBrowser.ScrollBarsEnabled = enableBrowserScrollbars 53 | MyWebBrowser.Visible = True 54 | MyWebBrowser.Navigate(New Uri(browserURL)) 55 | End If 56 | If Not checkAddress(versionFileURL) Then 57 | picRepair.Enabled = False 58 | Exit Sub 'offline mode 59 | End If 60 | 61 | 'Get launcher local version 62 | If File.Exists("version.ini") Then 63 | Using fileReader As StreamReader = New StreamReader("version.ini") 64 | launcherLocalVersion = Integer.Parse(fileReader.ReadLine) 65 | End Using 66 | End If 67 | 68 | 'Get launcher web version 69 | Dim client As WebClient = New WebClient() 70 | Dim webReader As StreamReader = New StreamReader(client.OpenRead(versionFileURL)) 71 | Dim iVersion As String = webReader.ReadLine 72 | If iVersion.Length > 0 Then 73 | launcherWebVersion = Integer.Parse(iVersion) 74 | End If 75 | webReader.Close() 76 | 77 | 'Update if necessary 78 | If (launcherLocalVersion < launcherWebVersion) Then 79 | 'Disable buttons 80 | picStart.Enabled = False 81 | picRepair.Enabled = False 82 | lblFileName.Text = "" 83 | UpdateTimer.Enabled = True 84 | Call New Action(AddressOf updateFromWeb).BeginInvoke(Nothing, Me) 85 | End If 86 | End Sub 87 | 88 | Private Function checkAddress(ByVal URL As String) As Boolean 89 | Dim req As WebRequest 90 | req = WebRequest.Create(URL) 91 | Dim resp As WebResponse 92 | Try 93 | resp = req.GetResponse() 94 | resp.Close() 95 | req = Nothing 96 | Return True 97 | Catch ex As Exception 98 | req = Nothing 99 | Return False 100 | End Try 101 | End Function 102 | 103 | Private Sub updateFromWeb() 104 | updating = True 105 | 106 | 'Get info from web 107 | Dim myFileList As New List(Of String) 108 | Dim client As WebClient = New WebClient() 109 | Dim webReader As StreamReader = New StreamReader(client.OpenRead(fileListURL)) 110 | While (webReader.Peek() <> -1) 111 | myFileList.Add(webReader.ReadLine()) 112 | End While 113 | webReader.Close() 114 | 115 | 'Initialize progrss bar 116 | 'Set the progressbar maximum 117 | progressBarInit(myFileList.Count) 118 | 119 | 'Check if download folder exists 120 | If (Directory.Exists(myStartupPath + downloadFolderName)) Then 121 | Directory.Delete(myStartupPath + downloadFolderName, True) 122 | End If 123 | Directory.CreateDirectory(myStartupPath + downloadFolderName) 124 | 125 | 'Update files 126 | Dim fileHash As String 127 | Dim fileName As String 128 | For Each fileInfo In myFileList 129 | 'Split info 130 | fileHash = fileInfo.Split(vbTab)(0) 131 | fileName = Regex.Replace(fileInfo.Split(vbTab)(1), "[^\u0020-\u007E]+", String.Empty) 'Use regex to remove non ASCII characters 132 | 133 | 'Check for self update 134 | If fileName.ToLower.Equals(myFileName.ToLower) Then 135 | If disableSelfUpdates = False And (Not getFileHash(myStartupPath + fileName).Equals(fileHash)) Then 136 | myFileName = fileName 'in case of case sensitivity 137 | startSelfUpdate() 138 | Exit Sub 139 | End If 140 | Continue For 141 | End If 142 | 143 | 'Update progress bar 144 | 'Threading.Thread.Sleep(100) 145 | progressBarInc() 146 | progressText = "Checking: " + fileName 147 | 148 | 'Check if file exists 149 | If (File.Exists(myStartupPath + fileName)) Then 150 | 'No need to update if hash is correct 151 | If getFileHash(myStartupPath + fileName).Equals(fileHash) Then 152 | Continue For 153 | End If 154 | End If 155 | 156 | 'Generate the download file name 157 | Dim downloadedFileName As String 158 | If fileName.Contains("\") Then 159 | downloadedFileName = myStartupPath + downloadFolderName + "\" + Mid(fileName, fileName.LastIndexOf("\") + 1, fileName.Length) + ".tmp" 160 | Else 161 | downloadedFileName = myStartupPath + downloadFolderName + "\" + fileName + ".tmp" 162 | End If 163 | 164 | 'Change label to downloading 165 | 'Threading.Thread.Sleep(100) 166 | progressText = "Downloading: " + fileName 167 | 168 | 'Download the zip file 169 | Try 170 | client.DownloadFile(baseURL + pakFolderName + "/" + fileName.Replace("\", "/") + pakExtension, downloadedFileName) 171 | Catch ex As Exception 172 | 'Could not be found on the server (network delay maybe) 173 | MsgBox("Problem downloading " + fileName, MsgBoxStyle.Critical) 174 | Continue For 175 | End Try 176 | 177 | 'Extract the file 178 | If fileName.Contains("\") Then 179 | Dim fileFolderPath As String = myStartupPath + Mid(fileName, 1, fileName.LastIndexOf("\")) 180 | If (Not Directory.Exists(fileFolderPath)) Then 181 | Directory.CreateDirectory(fileFolderPath) 182 | End If 183 | End If 184 | 'Delete older file 185 | Dim fileExists As Boolean = False 'Used this boolean because File.Exists may lock the file 186 | If File.Exists(myStartupPath + fileName) Then 187 | fileExists = True 188 | End If 189 | If fileExists Then 190 | File.Delete(myStartupPath + fileName) 191 | End If 192 | 193 | ZipFile.ExtractToDirectory(downloadedFileName, myStartupPath) 194 | 195 | 'Delete the downloaded file 196 | File.Delete(downloadedFileName) 197 | Next 198 | 199 | 'Remove download folder 200 | Directory.Delete(myStartupPath + downloadFolderName, True) 201 | 202 | 'Update version.ini 203 | Using outputFile As StreamWriter = New StreamWriter(myStartupPath + "version.ini", False, System.Text.Encoding.Unicode) 204 | outputFile.Write(launcherWebVersion.ToString) 205 | outputFile.Close() 206 | End Using 207 | 208 | 'Finish message 209 | 'Threading.Thread.Sleep(100) 210 | progressText = "Your files are up to date." 211 | 212 | updating = False 213 | End Sub 214 | 215 | Private Sub startSelfUpdate() 216 | 'Generate the download file name 217 | Dim downloadedFileName = myStartupPath + downloadFolderName + "\" + myFileName + ".tmp" 218 | 219 | 'Download the zip file 220 | Dim webClient As New WebClient() 221 | Try 222 | webClient.DownloadFile(baseURL + pakFolderName + "/" + myFileName + pakExtension, downloadedFileName) 223 | Catch ex As Exception 224 | 'Could not be found on the server (network delay maybe) 225 | MsgBox("Problem downloading " + myFileName, MsgBoxStyle.Critical) 226 | Exit Sub 227 | End Try 228 | 229 | 'Extract the file 230 | ZipFile.ExtractToDirectory(downloadedFileName, myStartupPath + downloadFolderName) 231 | 232 | 'Rename the new launcher 233 | My.Computer.FileSystem.RenameFile(myStartupPath + downloadFolderName + "\" + myFileName, myFileName + "_") 234 | 'Run the new launcher 235 | Shell(downloadFolderName + "\" + myFileName + "_", vbMinimizedNoFocus) 236 | 'Close this launcher 237 | End 238 | End Sub 239 | 240 | Private Function getFileHash(ByVal fileName As String) 241 | Dim hash = SHA256.Create() 'Initializes a SHA-256 hash object 242 | Dim hashValue() As Byte 243 | 244 | 'Read the file 245 | Dim fileStream As FileStream = File.OpenRead(fileName) 246 | fileStream.Position = 0 247 | hashValue = hash.ComputeHash(fileStream) 248 | fileStream.Close() 249 | 250 | 'The array of bytes is converted into hexadecimal string 251 | Dim hashHex As String = "" 252 | Dim counter As Integer 253 | For counter = 0 To hashValue.Length - 1 254 | hashHex += hashValue(counter).ToString("X2") 'Convert each byte in hexadecimal 255 | Next counter 256 | 257 | 'Hash is returned in lowercase 258 | Return hashHex.ToLower 259 | End Function 260 | 261 | 'Make form dragable 262 | Dim drag As Boolean 263 | Dim mouseX As Integer 264 | Dim mouseY As Integer 265 | 266 | Private Sub frmMain_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown 267 | 'If updating Then Exit Sub 268 | If e.Button = MouseButtons.Left Then 269 | drag = True 270 | mouseX = Cursor.Position.X - Me.Left 271 | mouseY = Cursor.Position.Y - Me.Top 272 | End If 273 | End Sub 274 | 275 | Private Sub frmMain_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseMove 276 | If drag Then 277 | Me.Top = Cursor.Position.Y - mouseY 278 | Me.Left = Cursor.Position.X - mouseX 279 | End If 280 | End Sub 281 | 282 | Private Sub frmMain_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseUp 283 | drag = False 284 | End Sub 285 | 286 | 'Progress bar subs 287 | Private Sub progressBarInit(count As Integer) 288 | If Me.InvokeRequired Then 289 | 'We are on the wrong thread, marshal the call to the UI thread 290 | Me.Invoke(Sub() progressBarInit(count)) 291 | Else 292 | 'Now we are on the UI thread, safe to update the control 293 | If count > 0 Then 294 | picLoadingFore.Width = 0 295 | End If 296 | progressBarCounter = 0 297 | progressBarCounterMax = count 298 | End If 299 | End Sub 300 | 301 | Private Sub progressBarInc() 302 | progressBarCounter = progressBarCounter + 1 303 | End Sub 304 | 305 | 'Minimize from taskbar click 306 | Protected Overrides ReadOnly Property CreateParams() As CreateParams 307 | Get 308 | Dim CP As CreateParams = MyBase.CreateParams 309 | CP.Style = &HA0000 310 | Return CP 311 | End Get 312 | End Property 313 | 314 | 'Button "Start" 315 | Private Sub picStart_Click(sender As Object, e As EventArgs) Handles picStart.Click 316 | If updating Then Exit Sub 317 | Try 318 | Shell("system\l2.bin IP=" + gameServerIP, vbNormalFocus) 319 | Catch ex As Exception 320 | MsgBox("L2.bin not found! Try checking your files.", MsgBoxStyle.Critical, "Auto Updater") 321 | Exit Sub 322 | End Try 323 | End 324 | End Sub 325 | 326 | Private Sub picStart_MouseHover(sender As Object, e As EventArgs) Handles picStart.MouseHover 327 | picStart.Image = picStartOver.Image 328 | End Sub 329 | 330 | Private Sub picStart_MouseLeave(sender As Object, e As EventArgs) Handles picStart.MouseLeave 331 | picStart.Image = picStartNormal.Image 332 | End Sub 333 | 334 | Private Sub picStart_MouseDown(sender As Object, e As MouseEventArgs) Handles picStart.MouseDown 335 | picStart.Image = picStartSelected.Image 336 | End Sub 337 | 338 | 'Button "File Repair" 339 | Private Sub picRepair_Click(sender As Object, e As EventArgs) Handles picRepair.Click 340 | If updating Then Exit Sub 341 | 342 | 'Connectivity check 343 | If checkAddress(versionFileURL) Then 344 | 'Disable buttons 345 | picStart.Enabled = False 346 | picRepair.Enabled = False 347 | lblFileName.Text = "" 348 | UpdateTimer.Enabled = True 349 | Call New Action(AddressOf updateFromWeb).BeginInvoke(Nothing, Me) 350 | Else 351 | MsgBox("Cannot reach the server!", MsgBoxStyle.Critical, "Auto Updater") 352 | End If 353 | End Sub 354 | 355 | Private Sub picRepair_MouseHover(sender As Object, e As EventArgs) Handles picRepair.MouseHover 356 | picRepair.Image = picRepairOver.Image 357 | End Sub 358 | 359 | Private Sub picRepair_MouseLeave(sender As Object, e As EventArgs) Handles picRepair.MouseLeave 360 | picRepair.Image = picRepairNormal.Image 361 | End Sub 362 | 363 | Private Sub picRepair_MouseDown(sender As Object, e As MouseEventArgs) Handles picRepair.MouseDown 364 | picRepair.Image = picRepairSelected.Image 365 | End Sub 366 | 367 | 'On unexpected form close 368 | Private Sub frmMain_Closed(sender As Object, e As EventArgs) Handles Me.Closed 369 | End 370 | End Sub 371 | 372 | 'Button "X" - Close 373 | Private Sub picClose_Click(sender As Object, e As EventArgs) Handles picClose.Click 374 | If updating Then 375 | Dim result As Integer = MessageBox.Show("Exit while updating?", "Warning", MessageBoxButtons.YesNo) 376 | If result = DialogResult.No Then 377 | Exit Sub 378 | End If 379 | End If 380 | End 381 | End Sub 382 | 383 | Private Sub picClose_MouseHover(sender As Object, e As EventArgs) Handles picClose.MouseHover 384 | picClose.Image = picCloseOver.Image 385 | End Sub 386 | 387 | Private Sub picClose_MouseLeave(sender As Object, e As EventArgs) Handles picClose.MouseLeave 388 | picClose.Image = picCloseNormal.Image 389 | End Sub 390 | 391 | Private Sub picClose_MouseDown(sender As Object, e As MouseEventArgs) Handles picClose.MouseDown 392 | picClose.Image = picCloseSelected.Image 393 | End Sub 394 | 395 | 'Button "_" - Minimize 396 | Private Sub picMinimize_Click(sender As Object, e As EventArgs) Handles picMinimize.Click 397 | Me.WindowState = FormWindowState.Minimized 398 | End Sub 399 | 400 | Private Sub picMinimize_MouseHover(sender As Object, e As EventArgs) Handles picMinimize.MouseHover 401 | picMinimize.Image = picMinimizeOver.Image 402 | End Sub 403 | 404 | Private Sub picMinimize_MouseLeave(sender As Object, e As EventArgs) Handles picMinimize.MouseLeave 405 | picMinimize.Image = picMinimizeNormal.Image 406 | End Sub 407 | 408 | Private Sub picMinimize_MouseDown(sender As Object, e As MouseEventArgs) Handles picMinimize.MouseDown 409 | picMinimize.Image = picMinimizeSelected.Image 410 | End Sub 411 | 412 | Private Sub updateTimer_Tick(sender As Object, e As EventArgs) Handles UpdateTimer.Tick 413 | If Me.InvokeRequired Then 414 | 'If we're not on the UI thread, re-invoke this method on the UI thread 415 | Me.Invoke(Sub() updateTimer_Tick(sender, e)) 416 | Else 417 | 'Now we are on the UI thread, safe to update the control 418 | If progressBarCounterMax > 0 AndAlso progressBarCounter > 0 Then ' Ensure progressBarCounter is not 0 to avoid division by zero 419 | Dim percentage As Double = progressBarCounter / CDbl(progressBarCounterMax) ' Ensure this is the correct calculation for your progress logic 420 | Dim newWidth As Integer = CInt(picLoadingBack.Width * percentage) 421 | picLoadingFore.Width = newWidth 422 | 423 | 'Move picLoadingSeperator to the end of picLoadingFore (just for visuals), otherwise this is not needed 424 | picLoadingSeperator.Location = New Point(picLoadingFore.Location.X + newWidth, picLoadingFore.Location.Y) 425 | End If 426 | 427 | 'Update info text 428 | lblFileName.Text = progressText 429 | 430 | 'Re-enable buttons check 431 | If Not updating Then 432 | picRepair.Enabled = True 433 | picStart.Enabled = True 434 | End If 435 | End If 436 | End Sub 437 | End Class 438 | -------------------------------------------------------------------------------- /AutoUpdater/frmMain.Designer.vb: -------------------------------------------------------------------------------- 1 | 2 | Partial Class frmMain 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) 27 | Me.lblFileName = New System.Windows.Forms.Label() 28 | Me.UpdateTimer = New System.Windows.Forms.Timer(Me.components) 29 | Me.MyWebBrowser = New System.Windows.Forms.WebBrowser() 30 | Me.picMinimize = New System.Windows.Forms.PictureBox() 31 | Me.picClose = New System.Windows.Forms.PictureBox() 32 | Me.picMinimizeNormal = New System.Windows.Forms.PictureBox() 33 | Me.picMinimizeOver = New System.Windows.Forms.PictureBox() 34 | Me.picMinimizeSelected = New System.Windows.Forms.PictureBox() 35 | Me.picCloseNormal = New System.Windows.Forms.PictureBox() 36 | Me.picCloseOver = New System.Windows.Forms.PictureBox() 37 | Me.picCloseSelected = New System.Windows.Forms.PictureBox() 38 | Me.picStart = New System.Windows.Forms.PictureBox() 39 | Me.picStartNormal = New System.Windows.Forms.PictureBox() 40 | Me.picStartOver = New System.Windows.Forms.PictureBox() 41 | Me.picStartSelected = New System.Windows.Forms.PictureBox() 42 | Me.picRepair = New System.Windows.Forms.PictureBox() 43 | Me.picRepairNormal = New System.Windows.Forms.PictureBox() 44 | Me.picRepairOver = New System.Windows.Forms.PictureBox() 45 | Me.picRepairSelected = New System.Windows.Forms.PictureBox() 46 | Me.picLoadingBack = New System.Windows.Forms.PictureBox() 47 | Me.picLoadingFore = New System.Windows.Forms.PictureBox() 48 | Me.picLoadingSeperator = New System.Windows.Forms.PictureBox() 49 | CType(Me.picMinimize, System.ComponentModel.ISupportInitialize).BeginInit() 50 | CType(Me.picClose, System.ComponentModel.ISupportInitialize).BeginInit() 51 | CType(Me.picMinimizeNormal, System.ComponentModel.ISupportInitialize).BeginInit() 52 | CType(Me.picMinimizeOver, System.ComponentModel.ISupportInitialize).BeginInit() 53 | CType(Me.picMinimizeSelected, System.ComponentModel.ISupportInitialize).BeginInit() 54 | CType(Me.picCloseNormal, System.ComponentModel.ISupportInitialize).BeginInit() 55 | CType(Me.picCloseOver, System.ComponentModel.ISupportInitialize).BeginInit() 56 | CType(Me.picCloseSelected, System.ComponentModel.ISupportInitialize).BeginInit() 57 | CType(Me.picStart, System.ComponentModel.ISupportInitialize).BeginInit() 58 | CType(Me.picStartNormal, System.ComponentModel.ISupportInitialize).BeginInit() 59 | CType(Me.picStartOver, System.ComponentModel.ISupportInitialize).BeginInit() 60 | CType(Me.picStartSelected, System.ComponentModel.ISupportInitialize).BeginInit() 61 | CType(Me.picRepair, System.ComponentModel.ISupportInitialize).BeginInit() 62 | CType(Me.picRepairNormal, System.ComponentModel.ISupportInitialize).BeginInit() 63 | CType(Me.picRepairOver, System.ComponentModel.ISupportInitialize).BeginInit() 64 | CType(Me.picRepairSelected, System.ComponentModel.ISupportInitialize).BeginInit() 65 | CType(Me.picLoadingBack, System.ComponentModel.ISupportInitialize).BeginInit() 66 | CType(Me.picLoadingFore, System.ComponentModel.ISupportInitialize).BeginInit() 67 | CType(Me.picLoadingSeperator, System.ComponentModel.ISupportInitialize).BeginInit() 68 | Me.SuspendLayout() 69 | ' 70 | 'lblFileName 71 | ' 72 | Me.lblFileName.BackColor = System.Drawing.Color.Transparent 73 | Me.lblFileName.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(161, Byte)) 74 | Me.lblFileName.ForeColor = System.Drawing.Color.BurlyWood 75 | Me.lblFileName.Location = New System.Drawing.Point(155, 368) 76 | Me.lblFileName.Name = "lblFileName" 77 | Me.lblFileName.Size = New System.Drawing.Size(327, 18) 78 | Me.lblFileName.TabIndex = 3 79 | ' 80 | 'UpdateTimer 81 | ' 82 | Me.UpdateTimer.Interval = 500 83 | ' 84 | 'MyWebBrowser 85 | ' 86 | Me.MyWebBrowser.Location = New System.Drawing.Point(27, 50) 87 | Me.MyWebBrowser.MinimumSize = New System.Drawing.Size(20, 20) 88 | Me.MyWebBrowser.Name = "MyWebBrowser" 89 | Me.MyWebBrowser.ScriptErrorsSuppressed = True 90 | Me.MyWebBrowser.ScrollBarsEnabled = False 91 | Me.MyWebBrowser.Size = New System.Drawing.Size(566, 237) 92 | Me.MyWebBrowser.TabIndex = 20 93 | Me.MyWebBrowser.Url = New System.Uri("", System.UriKind.Relative) 94 | Me.MyWebBrowser.Visible = False 95 | ' 96 | 'picMinimize 97 | ' 98 | Me.picMinimize.BackColor = System.Drawing.Color.Transparent 99 | Me.picMinimize.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 100 | Me.picMinimize.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_min_normal 101 | Me.picMinimize.Location = New System.Drawing.Point(565, 14) 102 | Me.picMinimize.Name = "picMinimize" 103 | Me.picMinimize.Size = New System.Drawing.Size(16, 16) 104 | Me.picMinimize.TabIndex = 21 105 | Me.picMinimize.TabStop = False 106 | ' 107 | 'picClose 108 | ' 109 | Me.picClose.BackColor = System.Drawing.Color.Transparent 110 | Me.picClose.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 111 | Me.picClose.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_close_normal 112 | Me.picClose.Location = New System.Drawing.Point(587, 15) 113 | Me.picClose.Name = "picClose" 114 | Me.picClose.Size = New System.Drawing.Size(16, 16) 115 | Me.picClose.TabIndex = 22 116 | Me.picClose.TabStop = False 117 | ' 118 | 'picMinimizeNormal 119 | ' 120 | Me.picMinimizeNormal.BackColor = System.Drawing.Color.Transparent 121 | Me.picMinimizeNormal.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 122 | Me.picMinimizeNormal.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_min_normal 123 | Me.picMinimizeNormal.Location = New System.Drawing.Point(434, 15) 124 | Me.picMinimizeNormal.Name = "picMinimizeNormal" 125 | Me.picMinimizeNormal.Size = New System.Drawing.Size(16, 16) 126 | Me.picMinimizeNormal.TabIndex = 23 127 | Me.picMinimizeNormal.TabStop = False 128 | Me.picMinimizeNormal.Visible = False 129 | ' 130 | 'picMinimizeOver 131 | ' 132 | Me.picMinimizeOver.BackColor = System.Drawing.Color.Transparent 133 | Me.picMinimizeOver.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 134 | Me.picMinimizeOver.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_min_over 135 | Me.picMinimizeOver.Location = New System.Drawing.Point(450, 15) 136 | Me.picMinimizeOver.Name = "picMinimizeOver" 137 | Me.picMinimizeOver.Size = New System.Drawing.Size(16, 16) 138 | Me.picMinimizeOver.TabIndex = 24 139 | Me.picMinimizeOver.TabStop = False 140 | Me.picMinimizeOver.Visible = False 141 | ' 142 | 'picMinimizeSelected 143 | ' 144 | Me.picMinimizeSelected.BackColor = System.Drawing.Color.Transparent 145 | Me.picMinimizeSelected.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 146 | Me.picMinimizeSelected.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_min_select 147 | Me.picMinimizeSelected.Location = New System.Drawing.Point(466, 15) 148 | Me.picMinimizeSelected.Name = "picMinimizeSelected" 149 | Me.picMinimizeSelected.Size = New System.Drawing.Size(16, 16) 150 | Me.picMinimizeSelected.TabIndex = 25 151 | Me.picMinimizeSelected.TabStop = False 152 | Me.picMinimizeSelected.Visible = False 153 | ' 154 | 'picCloseNormal 155 | ' 156 | Me.picCloseNormal.BackColor = System.Drawing.Color.Transparent 157 | Me.picCloseNormal.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 158 | Me.picCloseNormal.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_close_normal 159 | Me.picCloseNormal.Location = New System.Drawing.Point(487, 15) 160 | Me.picCloseNormal.Name = "picCloseNormal" 161 | Me.picCloseNormal.Size = New System.Drawing.Size(16, 16) 162 | Me.picCloseNormal.TabIndex = 26 163 | Me.picCloseNormal.TabStop = False 164 | Me.picCloseNormal.Visible = False 165 | ' 166 | 'picCloseOver 167 | ' 168 | Me.picCloseOver.BackColor = System.Drawing.Color.Transparent 169 | Me.picCloseOver.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 170 | Me.picCloseOver.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_close_over 171 | Me.picCloseOver.Location = New System.Drawing.Point(503, 15) 172 | Me.picCloseOver.Name = "picCloseOver" 173 | Me.picCloseOver.Size = New System.Drawing.Size(16, 16) 174 | Me.picCloseOver.TabIndex = 27 175 | Me.picCloseOver.TabStop = False 176 | Me.picCloseOver.Visible = False 177 | ' 178 | 'picCloseSelected 179 | ' 180 | Me.picCloseSelected.BackColor = System.Drawing.Color.Transparent 181 | Me.picCloseSelected.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 182 | Me.picCloseSelected.Image = Global.AutoUpdater.My.Resources.Resources.frames_df_btn_close_select 183 | Me.picCloseSelected.Location = New System.Drawing.Point(518, 15) 184 | Me.picCloseSelected.Name = "picCloseSelected" 185 | Me.picCloseSelected.Size = New System.Drawing.Size(16, 16) 186 | Me.picCloseSelected.TabIndex = 28 187 | Me.picCloseSelected.TabStop = False 188 | Me.picCloseSelected.Visible = False 189 | ' 190 | 'picStart 191 | ' 192 | Me.picStart.BackColor = System.Drawing.Color.Transparent 193 | Me.picStart.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 194 | Me.picStart.Image = Global.AutoUpdater.My.Resources.Resources.start_normal 195 | Me.picStart.Location = New System.Drawing.Point(470, 274) 196 | Me.picStart.Name = "picStart" 197 | Me.picStart.Size = New System.Drawing.Size(157, 146) 198 | Me.picStart.TabIndex = 29 199 | Me.picStart.TabStop = False 200 | ' 201 | 'picStartNormal 202 | ' 203 | Me.picStartNormal.BackColor = System.Drawing.Color.Transparent 204 | Me.picStartNormal.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 205 | Me.picStartNormal.Image = Global.AutoUpdater.My.Resources.Resources.start_normal 206 | Me.picStartNormal.Location = New System.Drawing.Point(387, 288) 207 | Me.picStartNormal.Name = "picStartNormal" 208 | Me.picStartNormal.Size = New System.Drawing.Size(22, 21) 209 | Me.picStartNormal.TabIndex = 30 210 | Me.picStartNormal.TabStop = False 211 | Me.picStartNormal.Visible = False 212 | ' 213 | 'picStartOver 214 | ' 215 | Me.picStartOver.BackColor = System.Drawing.Color.Transparent 216 | Me.picStartOver.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 217 | Me.picStartOver.Image = Global.AutoUpdater.My.Resources.Resources.start_over 218 | Me.picStartOver.Location = New System.Drawing.Point(413, 288) 219 | Me.picStartOver.Name = "picStartOver" 220 | Me.picStartOver.Size = New System.Drawing.Size(22, 21) 221 | Me.picStartOver.TabIndex = 31 222 | Me.picStartOver.TabStop = False 223 | Me.picStartOver.Visible = False 224 | ' 225 | 'picStartSelected 226 | ' 227 | Me.picStartSelected.BackColor = System.Drawing.Color.Transparent 228 | Me.picStartSelected.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 229 | Me.picStartSelected.Image = Global.AutoUpdater.My.Resources.Resources.start_select 230 | Me.picStartSelected.Location = New System.Drawing.Point(440, 288) 231 | Me.picStartSelected.Name = "picStartSelected" 232 | Me.picStartSelected.Size = New System.Drawing.Size(22, 21) 233 | Me.picStartSelected.TabIndex = 32 234 | Me.picStartSelected.TabStop = False 235 | Me.picStartSelected.Visible = False 236 | ' 237 | 'picRepair 238 | ' 239 | Me.picRepair.BackColor = System.Drawing.Color.Transparent 240 | Me.picRepair.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 241 | Me.picRepair.Image = Global.AutoUpdater.My.Resources.Resources.repair_normal 242 | Me.picRepair.Location = New System.Drawing.Point(-15, 345) 243 | Me.picRepair.Name = "picRepair" 244 | Me.picRepair.Size = New System.Drawing.Size(201, 73) 245 | Me.picRepair.TabIndex = 33 246 | Me.picRepair.TabStop = False 247 | ' 248 | 'picRepairNormal 249 | ' 250 | Me.picRepairNormal.BackColor = System.Drawing.Color.Transparent 251 | Me.picRepairNormal.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 252 | Me.picRepairNormal.Image = Global.AutoUpdater.My.Resources.Resources.repair_normal 253 | Me.picRepairNormal.Location = New System.Drawing.Point(25, 289) 254 | Me.picRepairNormal.Name = "picRepairNormal" 255 | Me.picRepairNormal.Size = New System.Drawing.Size(27, 27) 256 | Me.picRepairNormal.TabIndex = 34 257 | Me.picRepairNormal.TabStop = False 258 | Me.picRepairNormal.Visible = False 259 | ' 260 | 'picRepairOver 261 | ' 262 | Me.picRepairOver.BackColor = System.Drawing.Color.Transparent 263 | Me.picRepairOver.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 264 | Me.picRepairOver.Image = Global.AutoUpdater.My.Resources.Resources.repair_over 265 | Me.picRepairOver.Location = New System.Drawing.Point(58, 289) 266 | Me.picRepairOver.Name = "picRepairOver" 267 | Me.picRepairOver.Size = New System.Drawing.Size(27, 27) 268 | Me.picRepairOver.TabIndex = 35 269 | Me.picRepairOver.TabStop = False 270 | Me.picRepairOver.Visible = False 271 | ' 272 | 'picRepairSelected 273 | ' 274 | Me.picRepairSelected.BackColor = System.Drawing.Color.Transparent 275 | Me.picRepairSelected.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 276 | Me.picRepairSelected.Image = Global.AutoUpdater.My.Resources.Resources.repair_select 277 | Me.picRepairSelected.Location = New System.Drawing.Point(91, 289) 278 | Me.picRepairSelected.Name = "picRepairSelected" 279 | Me.picRepairSelected.Size = New System.Drawing.Size(27, 27) 280 | Me.picRepairSelected.TabIndex = 36 281 | Me.picRepairSelected.TabStop = False 282 | Me.picRepairSelected.Visible = False 283 | ' 284 | 'picLoadingBack 285 | ' 286 | Me.picLoadingBack.BackColor = System.Drawing.Color.Transparent 287 | Me.picLoadingBack.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 288 | Me.picLoadingBack.Image = Global.AutoUpdater.My.Resources.Resources.loadingbar_back 289 | Me.picLoadingBack.Location = New System.Drawing.Point(28, 315) 290 | Me.picLoadingBack.Name = "picLoadingBack" 291 | Me.picLoadingBack.Size = New System.Drawing.Size(454, 39) 292 | Me.picLoadingBack.TabIndex = 37 293 | Me.picLoadingBack.TabStop = False 294 | ' 295 | 'picLoadingFore 296 | ' 297 | Me.picLoadingFore.BackColor = System.Drawing.Color.Transparent 298 | Me.picLoadingFore.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 299 | Me.picLoadingFore.Image = Global.AutoUpdater.My.Resources.Resources.loadingbar_fore 300 | Me.picLoadingFore.Location = New System.Drawing.Point(28, 315) 301 | Me.picLoadingFore.Name = "picLoadingFore" 302 | Me.picLoadingFore.Size = New System.Drawing.Size(454, 39) 303 | Me.picLoadingFore.TabIndex = 38 304 | Me.picLoadingFore.TabStop = False 305 | ' 306 | 'picLoadingSeperator 307 | ' 308 | Me.picLoadingSeperator.BackColor = System.Drawing.Color.Transparent 309 | Me.picLoadingSeperator.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 310 | Me.picLoadingSeperator.Image = Global.AutoUpdater.My.Resources.Resources.loading_seperator 311 | Me.picLoadingSeperator.Location = New System.Drawing.Point(482, 315) 312 | Me.picLoadingSeperator.Name = "picLoadingSeperator" 313 | Me.picLoadingSeperator.Size = New System.Drawing.Size(1, 39) 314 | Me.picLoadingSeperator.TabIndex = 39 315 | Me.picLoadingSeperator.TabStop = False 316 | ' 317 | 'frmMain 318 | ' 319 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 320 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 321 | Me.BackColor = System.Drawing.Color.Black 322 | Me.BackgroundImage = Global.AutoUpdater.My.Resources.Resources.frame_black_background 323 | Me.ClientSize = New System.Drawing.Size(620, 419) 324 | Me.Controls.Add(Me.picLoadingSeperator) 325 | Me.Controls.Add(Me.picLoadingFore) 326 | Me.Controls.Add(Me.picLoadingBack) 327 | Me.Controls.Add(Me.lblFileName) 328 | Me.Controls.Add(Me.picRepair) 329 | Me.Controls.Add(Me.picRepairSelected) 330 | Me.Controls.Add(Me.picRepairOver) 331 | Me.Controls.Add(Me.picRepairNormal) 332 | Me.Controls.Add(Me.picStartSelected) 333 | Me.Controls.Add(Me.picStartOver) 334 | Me.Controls.Add(Me.picStartNormal) 335 | Me.Controls.Add(Me.picCloseSelected) 336 | Me.Controls.Add(Me.picCloseOver) 337 | Me.Controls.Add(Me.picCloseNormal) 338 | Me.Controls.Add(Me.picMinimizeSelected) 339 | Me.Controls.Add(Me.picMinimizeOver) 340 | Me.Controls.Add(Me.picMinimizeNormal) 341 | Me.Controls.Add(Me.picClose) 342 | Me.Controls.Add(Me.picMinimize) 343 | Me.Controls.Add(Me.MyWebBrowser) 344 | Me.Controls.Add(Me.picStart) 345 | Me.Cursor = System.Windows.Forms.Cursors.Default 346 | Me.ForeColor = System.Drawing.Color.Transparent 347 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None 348 | Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) 349 | Me.Name = "frmMain" 350 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen 351 | Me.Text = "AutoUpdater" 352 | CType(Me.picMinimize, System.ComponentModel.ISupportInitialize).EndInit() 353 | CType(Me.picClose, System.ComponentModel.ISupportInitialize).EndInit() 354 | CType(Me.picMinimizeNormal, System.ComponentModel.ISupportInitialize).EndInit() 355 | CType(Me.picMinimizeOver, System.ComponentModel.ISupportInitialize).EndInit() 356 | CType(Me.picMinimizeSelected, System.ComponentModel.ISupportInitialize).EndInit() 357 | CType(Me.picCloseNormal, System.ComponentModel.ISupportInitialize).EndInit() 358 | CType(Me.picCloseOver, System.ComponentModel.ISupportInitialize).EndInit() 359 | CType(Me.picCloseSelected, System.ComponentModel.ISupportInitialize).EndInit() 360 | CType(Me.picStart, System.ComponentModel.ISupportInitialize).EndInit() 361 | CType(Me.picStartNormal, System.ComponentModel.ISupportInitialize).EndInit() 362 | CType(Me.picStartOver, System.ComponentModel.ISupportInitialize).EndInit() 363 | CType(Me.picStartSelected, System.ComponentModel.ISupportInitialize).EndInit() 364 | CType(Me.picRepair, System.ComponentModel.ISupportInitialize).EndInit() 365 | CType(Me.picRepairNormal, System.ComponentModel.ISupportInitialize).EndInit() 366 | CType(Me.picRepairOver, System.ComponentModel.ISupportInitialize).EndInit() 367 | CType(Me.picRepairSelected, System.ComponentModel.ISupportInitialize).EndInit() 368 | CType(Me.picLoadingBack, System.ComponentModel.ISupportInitialize).EndInit() 369 | CType(Me.picLoadingFore, System.ComponentModel.ISupportInitialize).EndInit() 370 | CType(Me.picLoadingSeperator, System.ComponentModel.ISupportInitialize).EndInit() 371 | Me.ResumeLayout(False) 372 | 373 | End Sub 374 | Friend WithEvents lblFileName As Label 375 | Friend WithEvents UpdateTimer As Timer 376 | Friend WithEvents MyWebBrowser As WebBrowser 377 | Friend WithEvents picMinimize As PictureBox 378 | Friend WithEvents picClose As PictureBox 379 | Friend WithEvents picMinimizeNormal As PictureBox 380 | Friend WithEvents picMinimizeOver As PictureBox 381 | Friend WithEvents picMinimizeSelected As PictureBox 382 | Friend WithEvents picCloseNormal As PictureBox 383 | Friend WithEvents picCloseOver As PictureBox 384 | Friend WithEvents picCloseSelected As PictureBox 385 | Friend WithEvents picStart As PictureBox 386 | Friend WithEvents picStartNormal As PictureBox 387 | Friend WithEvents picStartOver As PictureBox 388 | Friend WithEvents picStartSelected As PictureBox 389 | Friend WithEvents picRepair As PictureBox 390 | Friend WithEvents picRepairNormal As PictureBox 391 | Friend WithEvents picRepairOver As PictureBox 392 | Friend WithEvents picRepairSelected As PictureBox 393 | Friend WithEvents picLoadingBack As PictureBox 394 | Friend WithEvents picLoadingFore As PictureBox 395 | Friend WithEvents picLoadingSeperator As PictureBox 396 | End Class 397 | -------------------------------------------------------------------------------- /AutoUpdaterPackageCreator/frmMain.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAEAMDAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAA 124 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQAAABMAAAAcAAAAHAAAABMAAAAJAAAABAAA 126 | AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAdVh7NcUYa25EBvm+ckQVyBAAAASAAA 129 | ADgAAAAjAAAAEgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFUoGqO2CYysdinM//U4m6/0Jz 132 | oP86aZT/MlqA2xUmNn4AAABLAAAANAAAAB4AAAAPAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA 133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABD9jghpgl8epZZ/S/2Oe 135 | 0f9inM//U4m6/0JzoP86aZT/OWeS/zhlj/8rTnDJCA8WZgAAAEYAAAAuAAAAGgAAAAwAAAAFAAAAAQAA 136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAIX5TDe2ag 138 | 0/NmoNP/ZZ/S/2Oe0f9hms3/T4Sz/z9umf85aJP/OWeS/zhlj/82Y43/NF+G9yI+WKsAAABXAAAAQAAA 139 | ACkAAAAWAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAB1mL 141 | tkxnodPkaKPW/2ei1f9akMH/SXup/1WLvP9Wi7v/QG+Z/zVfhv83ZY7/OWeS/zJagf8oS23/L1d9/zRf 142 | h/8vWH3uFik7jAAAAFIAAAA6AAAAIwAAABIAAAAIAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 143 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA 144 | AAVRfaIrZ6HSx2qm2f9ppNf/YJjK/0yArv9Wi7v/bKbZ/1eMvP89aI//L1V6/y5Wev82Y4z/OWeS/zhh 145 | if9JfKr/NV2C/yhKa/8vV3z/MVuC/ypNb9wMFyJ1AAAASwAAADQAAAAeAAAADwAAAAYAAAACAAAAAQAA 146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 147 | AAEAAAAER22OGWeezZptqNv/a6fa/2Se0f9Rhrb/U4e3/2uk1f9xreD/ca3g/2Oczf8vVnn/KU1v/y1U 148 | d/82Y4z/MlyE/0t+rP9Og7P/TYGx/0R0of8uUnb/J0lq/y5Uef8uVn3/Ij9cvwcNE2YAAABGAAAALgAA 149 | ABoAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 150 | AAAAAAABAAAAAwAAAAhjmMZsbqnc826p3P9po9b/WI/A/1OIt/9ro9P/da/g/3Su4P9yreD/ca3g/3Gt 151 | 4P89aJH/KUxu/y1Ud/82Y4z/OGOL/1CFtf9Og7P/TYGx/0x/r/9Kfaz/QG6Y/ytNbv8nSWr/LFF2/ytQ 152 | dfcaMEahAAAAVwAAAEAAAAApAAAAFgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 153 | AAAAAAAAAAAAAAAAAAIAAAAGYZXAS22o2dZwrN//banb/1+XyP9Wi7n/aZ7O/3iw3/93r9//dq/g/3Su 154 | 4P9zruD/cq3g/3Gt4P9Wi7r/KUxu/y1Ud/8xWoH/TICu/1CFtf9Og7P/TYGx/0x/r/9Kfq3/SXyq/0d6 155 | qP85ZIv/J0hn/ydIaf8qT3P/JUdn5RIjM4wAAABSAAAAOgAAACMAAAASAAAACAAAAAMAAAABAAAAAAAA 156 | AAAAAAAAAAAAAAAAAAAAAAABAAAAA1mHrSpvqNi4cq/i/3Gt4P9jnc7/V4y7/2ecyv95rtz/e7Hf/3mw 157 | 3/94sN//dq/g/3Wv4P90ruD/cq7g/3Gt4P9sptn/LlR4/y1Ud/85ZY7/UYe3/1CFtf9Pg7P/TYGx/0yA 158 | r/9Kfq3/SXyq/0d6qP9GeKb/Q3Og/zNZfv8kQV7/JUZm/yhMcP8gPlvTChMddQAAAEsAAAA0AAAAHgAA 159 | AA8AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAABpoM0ScKvbhnWx5P90sOP/aaTX/1iPwP9onMr/fLDd/36y 160 | 3/99st//e7Hf/3qx3/95sN//d6/f/3av4P90ruD/c67g/3Kt4P9xreD/RXOf/yxRdf9OgrH/UYe4/1CF 161 | tf9Pg7P/TYGx/0yAr/9Kfq3/SXyr/0h6qP9GeKb/RXak/0N0ov9AcJz/L1N2/yE9V/8lRWX/JUhq/xkx 162 | SbYFCxBmAAAARgAAAC4AAAAaAAAACwAAAAMAAAAAAAAAAAAAAAB3tObjdrPm/26p3P9fmMn/ZZrJ/36v 163 | 2v+CtN7/gLPf/3+y3/99st//fLHf/3ux3/95sN//eLDf/3ev3/91r+D/dK7g/3Ou4P9tqNv/X5fI/zlk 164 | jP9Tibr/UYe4/1CFtf9Pg7P/TYKx/0yAr/9Kfq3/SXyr/0h6qf9GeKb/RXak/0N1ov9Cc6D/QXGe/ztp 165 | k/8pSmn/IT1Z/yNDY/8hQF/vAAAAaQAAAFcAAAA+AAAAJAAAAA0AAAAAAAAAAAAAAAB0sOP/Y57Q/2ab 166 | y/97rNf/hbXe/4S03v+CtN7/gbPf/3+z3/9+st//fbLf/3ux3/96sd//ebDf/3ev3/92r+D/cqrc/2ul 167 | 1v9+sd3/cavc/0+Es/9Tibr/Uoe4/1CFtv9Pg7P/TYKx/0yAr/9Lfq3/SXyr/0h6qf9GeKf/RXek/0N1 168 | ov9Cc6D/QXGe/z9vnP8+bZr/NWCG/ydGZP8hPVn/Bw0TiwAAAHMAAABiAAAAQgAAABsAAAAAYJrMEF+Y 169 | y5Bjm8z/fKzX/4m23v+Htt7/hrXe/4S13v+DtN7/grTe/4Cz3/9/s9//frLf/3yx3/97sd//erDf/3au 170 | 3f9xqNf/e6/b/5O+5f+KuuL/X422/0x5ov9mnMz/WpDA/1CFtv9PhLT/TYKx/0yAr/9Lfq3/SXyr/0h6 171 | qf9GeKf/RXek/0R1ov9Cc6D/QXGe/z9vnP8+bZr/PWyX/ztqlf8yWn//I0Bb/xcqPMYEBwp8AAAAVAAA 172 | ACNinc+AZJ3O8Xmr1v+MuN7/i7fe/4m33v+Itt7/hrXe/4W13v+EtN7/grTe/4Gz3/+As9//frLf/32y 173 | 3/98sd//c6rY/3er2P+NvOL/kb/l/26bw/8zSGD/KTVG/yczSP8pO1T/W4u5/2CXxv9WjLz/ToOz/0yA 174 | r/9Lfq3/SXyr/0h6qf9Geaf/RXel/0R1ov9Cc6D/QXGe/z9vnP8+bpr/PWyX/ztqlf86aJP/OWeS/y5T 175 | d/8hO1T4GCs+rAAAACZ7rNf4jbfc/4643f+NuN3/i7fe/4q33v+Jtt7/h7be/4a13v+Ftd7/g7Te/4K0 176 | 3v+As9//frLf/3mt2v9xpdT/i7nf/5rD5/95p8//OlVw/x8pOf8lLz//KjVG/ys3Tf8aJDb/FiAy/zJP 177 | bP9bj77/XJHA/1GGtf9Lfq3/SXyr/0h7qf9Heaf/RXel/0R1ov9Cc6D/QXGe/0BwnP8+bpr/PWyY/ztq 178 | lf86aJP/OWeS/zlnkv84ZI7/LFBy9QAAACaQud35kLnd/4+53f+NuN3/jLje/4u33v+Jt97/iLbe/4e2 179 | 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 221 | lf+6urr/yMjI/7a4uv9aYW7/FyE0/xYgMv9la3b/3+Dh/+3t7f/m5ub/0dHR/9bW1v/r6+v/4uLi/9XV 222 | 1f/l5eX/2tze/1BWYv8WIDH/JTJG/yYyRv8QGCj/DBMi/woRIP8LEiD/ChAe/wULGP8AAAAAAAAAAAAA 223 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYS/wcMF/8TGij/ISw9/ys3S/8sOU3/ADVq/0Zd 224 | cv+SkpL/rKys/7e3t//Ly8v/4ODg/93d3f/Q0ND/p6qu/z5GVf8VHzH/Iio7/4GFjv/w8PD/7+/v/+Hh 225 | 4f/T09P/4+Pj/+7u7v/b29v/2dnZ//T09P/CxMj/JS06/xwnOf8lMUX/HCY4/w0UI/8MEiD/CA8c/wYM 226 | Gv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYS/wkOGv8oNUn/Iy5A/yMu 227 | Pf8pNET/ACpV/xUsRP96hZD/3t7e/+bm5v/a2tr/z8/P/9XV1f/n5+f/2NjY/87Ozv+UmJ//HCY2/xMc 228 | Lf8uNkX/rK+0//Pz8//u7u7/2tra/9jY2P/y8vL/7Ozs/9DQ0P/j4+P//////46SmP8aIjH4Hik7/yIu 229 | Qv8SGyv/CA4c/wgOG/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYS/yUx 230 | RP8cJTX/Iyk0/1NWW/9tb3D/TV5x/wcoTP8AIkb/OlJt/6+2v//p6en/6Ojo/9XV1f/Nzc3/39/f/+jo 231 | 6P/S0tL/y8vN/3p/iP8SGyz/ERoq/0lPW//a293/9/f3/+rq6v/Ozs7/4uLi//v7+//k5OT/1tbW/+/v 232 | 7//w8PH/Zmt05BIbK/8lMUX/ICw+/wwTIv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 233 | AAAAAAAABQkW/yo2S/87PkX/bW1t/5WVlf+6urr/yMjI/7O4vP9LYXn/ACFE/wAgQv9Ya3//3uDi/+3t 234 | 7f/m5ub/0dHR/9bW1v/r6+v/4uLi/9XV1f/LzM7/T1Zi/xAZKf8PFyf/dXmC/+zs7f/4+Pj/4uLi/9XV 235 | 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 263 | 9f/b29v/4ODg//j4+P/r6+v/9vb2//////CGlqaoASJG6gYNGuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 264 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 265 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxcmcA0V 266 | JPAMFCL/OT9L/8LEyP//////6+vr//b29v//////////sP///yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 267 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 268 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 269 | AAAAAAAAAAAAAA4VJRAMFCOQCxMh/woRH/9WW2T/4eLj/////+D///9AAAAAAAAAAAAAAAAAAAAAAAAA 270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 272 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBMiMAoRIMAJEB7/CA8c/wAAAAAAAAAAAAAAAAAA 273 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 274 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 275 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEB5QCA8c4AAA 276 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 277 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///AD//8AAP//wAD//wAA//+AAD// 278 | AAD//gAAH/8AAP/4AAAH/wAA/+AAAAH/AAD/wAAAAH8AAP8AAAAAPwAA/AAAAAAPAAD4AAAAAAMAAOAA 279 | AAAAAQAA4AAAAAAAAADgAAAAAAAAAOAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 280 | AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAwAAAAAABAADAAAAAAAMAAOAA 281 | AAAADwAA8AAAAAA/AADwAAAAAD8AAPAAAAAAPwAA8AAAAAA/AADwAAAAAD8AAPAAAAAAPwAA8AAAAAA/ 282 | AADwAAAAAD8AAPAAAAAAPwAA8AAAAAA/AADwAAAAAf8AAPAAAAAH/wAA+AAAAA//AAD+AAAAD/8AAP+A 283 | AAB//wAA/8AAAf//AAD/8AAD//8AAP/8AAP//wAA//8AH///AAD//4B///8AAP//4f///wAA///5//// 284 | AAA= 285 | 286 | 287 | --------------------------------------------------------------------------------