using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using Squirrel; using Microsoft.Win32.TaskScheduler; namespace BodyshopPartner.Utils { public static class SquirrelAwareHelper { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public static bool AddHttpExcetion() { logger.Debug("Attempting to add HTTP Exclusion for web-server"); string args = string.Format(@"http add urlacl url={0} user={1}", "http://+:1337/", "Everyone"); ProcessStartInfo psi = new ProcessStartInfo("netsh", args); psi.Verb = "runas"; psi.CreateNoWindow = true; psi.WindowStyle = ProcessWindowStyle.Hidden; psi.UseShellExecute = true; try { Process.Start(psi).WaitForExit(); logger.Debug("Added web-server port exclusion."); return true; } catch (Exception Ex) { logger.Error("Unable to register exception " + Ex.ToString()); return false; } } public static void InitializeSquirrelAware() { using (var mgr = new UpdateManager(Utils.UpdateHandler.UpdatePath)) { // Note, in most of these scenarios, the app exits after this method // completes! SquirrelAwareApp.HandleEvents( onInitialInstall: v => { logger.Debug("Installing via Squirrel Aware Helper. ", v); try { bool successful = AddHttpExcetion(); if (successful) { logger.Debug("Successfully added exception."); } else { logger.Fatal("Unable to set exception for http port"); } } catch (Exception Ex) { logger.Fatal("Unable to set exception for http port", Ex.ToString()); } Utils.UpdateHandler.ToggleStartWithWindows(true); mgr.CreateShortcutForThisExe(); }, onAppUpdate: v => { mgr.CreateShortcutForThisExe(); Utils.UpdateHandler.RestoreSettings(); Utils.UpdateHandler.ToggleStartWithWindows(Properties.Settings.Default.StartWithWindows); Utils.PaintScaleConfig.RegisterScheduledTask(); }, onAppUninstall: v => { mgr.RemoveShortcutForThisExe(); try { Microsoft.Win32.TaskScheduler.Task existingTask = TaskService.Instance.FindTask("ImEX Online Partner - Paint Scale Connection"); if (existingTask != null) { TaskService.Instance.RootFolder.DeleteTask("ImEX Online Partner - Paint Scale Connection"); } } catch (Exception ex) { logger.Error(ex, "Error removing task while uninstalling."); } }, onFirstRun: () => { logger.Info("We've run for the first time."); Utils.UpdateHandler.ToggleStartWithWindows(true); }); } } } }