├── 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 |
--------------------------------------------------------------------------------