Files
newfolder/GoldenEye/Installer/Installer.cs
Wesley Hofman 2f1f4199ad first commit
2025-09-18 14:23:18 +02:00

237 lines
7.6 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GlobalScope;
using System.IO;
namespace Installer
{
public partial class Installer : Form
{
private List<String> _Messages = new List<string>();
public String FileNameExceptionContent
{
get
{
// Returns part of exec name to scan for and ignore in deleting and copying
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
string name = new FileInfo(exe).Name;
string ext = new FileInfo(exe).Extension;
name = name.Replace(ext, "");
return name.ToLower();
}
}
public Installer()
{
InitializeComponent();
}
private void Installer_Load(object sender, EventArgs e)
{
this.Text = Globals.SoftwareDescription + " installer";
// Center screen
this.Location = new Point((int)Math.Round((Screen.PrimaryScreen.Bounds.Width - this.Size.Width) / 2.0), (int)Math.Round((Screen.PrimaryScreen.Bounds.Height - this.Size.Height) / 2.0));
// Running locally?
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
if (!exe.ToLower().Contains(Globals.PathToServerVersion.ToLower()))
{
MessageBox.Show("You can only run " + Globals.SoftwareDescription + " from server!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
txtbFolder.Text = Globals.PathToPreferredInstall+@"\";
}
private void btnBrowse_Click(object sender, EventArgs e)
{
fbd.RootFolder = Environment.SpecialFolder.Desktop;
DialogResult dr = fbd.ShowDialog();
if (dr != System.Windows.Forms.DialogResult.OK)
return;
txtbFolder.Text = fbd.SelectedPath;
}
private void btnOK_Click(object sender, EventArgs e)
{
string targetFolder = txtbFolder.Text + "\\";
// Exists?
if (!Directory.Exists(targetFolder))
{
DialogResult dr = MessageBox.Show("Folder does not exist!\n\nDo you want to create the folder?", Globals.SoftwareDescription, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if( dr != System.Windows.Forms.DialogResult.Yes)
return;
try
{
Directory.CreateDirectory(targetFolder);
}
catch
{
MessageBox.Show("Could not create folder!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
// Is empty folder?
if (Directory.GetFiles(targetFolder).Length > 0)
{
MessageBox.Show("Installation folder must be empty!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
lbox.Location = new Point(18, 18);
lbox.Visible = true;
// Make fileLists
string[] serverFileList;
if (Directory.Exists(Globals.PathToServerVersion))
serverFileList = Directory.GetFiles(Globals.PathToServerVersion);
else
{
_Messages.Add("Serverpath not accessible!");
UpdateMessages();
return;
}
Boolean ErrorEncountered = false;
// Copy all files except installer
#region Copy to local
foreach (string serverFilePath in serverFileList)
{
if (serverFilePath.ToLower().IndexOf(FileNameExceptionContent) < 0)
{
string targetFilePath = "";
try
{
string name = new FileInfo(serverFilePath).Name;
targetFilePath = targetFolder + name;
File.Copy(serverFilePath, targetFilePath, true);
_Messages.Add(String.Format("Copying : {0}\n", targetFilePath));
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add(String.Format("Failed to copy : {0}", targetFilePath));
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
UpdateMessages();
}
}
#endregion Copy to local
Globals.RegisterUser(Globals.UpdaterModuleDescription + " (v" + Globals.BuildVersion + ")");
_Messages.Add("User register updated");
UpdateMessages();
#region Create shortcut
try
{
string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string shortcutLocation = Path.Combine(deskDir, Globals.SoftwareDescription + ".lnk");
if (File.Exists(shortcutLocation))
File.Delete(shortcutLocation);
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutLocation);
shortcut.Description = Globals.SoftwareDescription;
shortcut.IconLocation = targetFolder + Globals.FileNameOfSoftware;
shortcut.TargetPath = targetFolder + Globals.FileNameOfSoftware;
shortcut.Save();
_Messages.Add("Shortcut created");
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add("Failed to create shortcut :");
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
finally
{
UpdateMessages();
}
#endregion Create shortcut
// Launch
try
{
string f = targetFolder + Globals.FileNameOfSoftware;
System.Diagnostics.Process.Start(f);
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add(String.Format("Failed to launch {0}", Globals.FileNameOfSoftware));
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
finally
{
if (!ErrorEncountered)
Application.Exit();
}
}
private void UpdateMessages()
{
int stop = _Messages.Count - 1;
int start = (int)Math.Max(stop - 19, 0);
lbox.Items.Clear();
for (int i = start; i <= stop; i++)
lbox.Items.Add(_Messages[i]);
lbox.Refresh();
lbox.ClearSelected();
this.Refresh();
System.Threading.Thread.Sleep(50);
}
}
}