Display process of updating via console msg and hide control buttons for updater window.
parent
2f3e8e1aea
commit
21efe55c26
Binary file not shown.
Binary file not shown.
Binary file not shown.
118
Program.cs
118
Program.cs
|
@ -3,27 +3,48 @@ using System.IO;
|
|||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using static System.Net.WebRequestMethods;
|
||||
using System.Threading.Tasks;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace AVSUpdater
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
|
||||
// Windows API functions for manipulating window styles
|
||||
// P/Invoke to get the handle to the console window from kernel32.dll
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr GetConsoleWindow();
|
||||
|
||||
// Windows API functions for manipulating window styles (user32.dll)
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
static extern int GetWindowLong(IntPtr hwnd, int nIndex);
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
|
||||
|
||||
// Constants for window styles
|
||||
const int GWL_STYLE = -16;
|
||||
const int WS_SYSMENU = 0x00080000;
|
||||
|
||||
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
//if (args.Length < 2)
|
||||
//{
|
||||
// Console.WriteLine("Invalid arguments. Usage: AVSUpdater.exe <sourcePath> <destinationPath>");
|
||||
// return;
|
||||
//}
|
||||
|
||||
//string sourcePath = args[0];
|
||||
//string destinationPath = args[1];
|
||||
// Get handle to the console window
|
||||
IntPtr hwnd = GetConsoleWindow();
|
||||
|
||||
if (hwnd != IntPtr.Zero)
|
||||
{
|
||||
int style = GetWindowLong(hwnd, GWL_STYLE);
|
||||
|
||||
// Remove the system menu style (which includes the close button)
|
||||
SetWindowLong(hwnd, GWL_STYLE, style & ~WS_SYSMENU);
|
||||
// Define the source and destination paths
|
||||
string sourcePath = @"\\FileServer\\eData\\AVS";
|
||||
string destinationPath = "C:\\Users\\Public\\Documents\\AVS";
|
||||
|
||||
|
||||
// Define the application name
|
||||
string applicationName = "AVS.exe";
|
||||
|
||||
try
|
||||
|
@ -33,12 +54,15 @@ namespace AVSUpdater
|
|||
{
|
||||
Directory.CreateDirectory(destinationPath);
|
||||
}
|
||||
MessageBox.Show("Start Copying Files");
|
||||
Console.WriteLine("Updating AVS please wait!");
|
||||
|
||||
|
||||
await Task.Delay(1000); // Delay to allow the updater to initialize
|
||||
Console.WriteLine("Copying files.....................!");
|
||||
// Copy all files from the source to the destination
|
||||
foreach (var file in Directory.GetFiles(sourcePath, "*", SearchOption.AllDirectories))
|
||||
{
|
||||
|
||||
|
||||
Console.WriteLine(".");
|
||||
// Manually calculate the relative path
|
||||
string relativePath = file.Substring(sourcePath.Length + 1); // Remove the sourcePath part
|
||||
|
||||
|
@ -58,18 +82,22 @@ namespace AVSUpdater
|
|||
continue;
|
||||
}
|
||||
|
||||
// Copy the file
|
||||
File.Copy(file, destFilePath, overwrite: true);
|
||||
// Check if the file is open by another process
|
||||
if (IsFileOpen(file))
|
||||
{
|
||||
// Close the file
|
||||
CloseFile(file);
|
||||
}
|
||||
|
||||
// Copy the file
|
||||
System.IO.File.Copy(file, destFilePath, overwrite: true);
|
||||
}
|
||||
Console.WriteLine("Copy completed!");
|
||||
// Restart the main application
|
||||
string applicationPath = Path.Combine(destinationPath, applicationName);
|
||||
Console.WriteLine(applicationPath);
|
||||
|
||||
|
||||
if (File.Exists(applicationPath))
|
||||
if (System.IO.File.Exists(applicationPath))
|
||||
{
|
||||
MessageBox.Show("Starting application again");
|
||||
Process.Start(applicationPath);
|
||||
}
|
||||
else
|
||||
|
@ -79,9 +107,59 @@ namespace AVSUpdater
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Show an error message if an exception occurs
|
||||
Console.WriteLine($"An error occurred during the update: {ex.Message}");
|
||||
}
|
||||
//Console.ReadKey();
|
||||
await Task.Delay(1500);
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Method to check if a file is open by another process
|
||||
public static bool IsFileOpen(string filePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Write, FileShare.None))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Method to close a file that is open by another process
|
||||
private static void CloseFile(string filePath)
|
||||
{
|
||||
var processes = Process.GetProcesses();
|
||||
foreach (var process in processes)
|
||||
{
|
||||
try
|
||||
{
|
||||
var files = process.Modules; // Define 'files' here
|
||||
foreach (var file in files)
|
||||
{
|
||||
var processModule = file as ProcessModule;
|
||||
if (processModule != null && processModule.FileName.ToLower() == filePath.ToLower())
|
||||
{
|
||||
process.Kill();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// Ignore exceptions
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue