mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Move restart function to app class
This commit is contained in:
parent
eacccf9823
commit
d6462f4fdc
2 changed files with 42 additions and 40 deletions
|
|
@ -1,5 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
@ -319,6 +321,45 @@ namespace Flow.Launcher
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Restart
|
||||||
|
|
||||||
|
// Since Squirrel does not provide a way to restart the app as administrator,
|
||||||
|
// we need to do it manually by starting the update.exe with the runas verb
|
||||||
|
public static void RestartAppAsAdministrator()
|
||||||
|
{
|
||||||
|
var startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = getUpdateExe(),
|
||||||
|
Arguments = $"--processStartAndWait {Constant.ExecutablePath}",
|
||||||
|
UseShellExecute = true,
|
||||||
|
Verb = "runas",
|
||||||
|
};
|
||||||
|
Process.Start(startInfo);
|
||||||
|
Thread.Sleep(500);
|
||||||
|
Environment.Exit(0);
|
||||||
|
|
||||||
|
// Local function
|
||||||
|
static string getUpdateExe()
|
||||||
|
{
|
||||||
|
Assembly entryAssembly = Assembly.GetEntryAssembly();
|
||||||
|
if (entryAssembly != null && Path.GetFileName(entryAssembly.Location).Equals("update.exe", StringComparison.OrdinalIgnoreCase) && entryAssembly.Location.IndexOf("app-", StringComparison.OrdinalIgnoreCase) == -1 && entryAssembly.Location.IndexOf("SquirrelTemp", StringComparison.OrdinalIgnoreCase) == -1)
|
||||||
|
{
|
||||||
|
return Path.GetFullPath(entryAssembly.Location);
|
||||||
|
}
|
||||||
|
|
||||||
|
entryAssembly = Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly();
|
||||||
|
FileInfo fileInfo = new FileInfo(Path.Combine(Path.GetDirectoryName(entryAssembly.Location), "..\\Update.exe"));
|
||||||
|
if (!fileInfo.Exists)
|
||||||
|
{
|
||||||
|
throw new Exception("Update.exe not found, not a Squirrel-installed app?");
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileInfo.FullName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region IDisposable
|
#region IDisposable
|
||||||
|
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
@ -171,46 +167,11 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
|
||||||
await ImageLoader.WaitSaveAsync();
|
await ImageLoader.WaitSaveAsync();
|
||||||
|
|
||||||
// Restart the app as administrator
|
// Restart the app as administrator
|
||||||
RestartAppAsAdministrator(Constant.ExecutablePath);
|
App.RestartAppAsAdministrator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since Squirrel does not provide a way to restart the app as administrator,
|
|
||||||
// we need to do it manually by starting the update.exe with the runas verb
|
|
||||||
private static void RestartAppAsAdministrator(string exeToStart)
|
|
||||||
{
|
|
||||||
var startInfo = new ProcessStartInfo
|
|
||||||
{
|
|
||||||
FileName = getUpdateExe(),
|
|
||||||
Arguments = $"--processStartAndWait {exeToStart}",
|
|
||||||
UseShellExecute = true,
|
|
||||||
Verb = "runas",
|
|
||||||
};
|
|
||||||
Process.Start(startInfo);
|
|
||||||
Thread.Sleep(500);
|
|
||||||
Environment.Exit(0);
|
|
||||||
|
|
||||||
// Local function
|
|
||||||
static string getUpdateExe()
|
|
||||||
{
|
|
||||||
Assembly entryAssembly = Assembly.GetEntryAssembly();
|
|
||||||
if (entryAssembly != null && Path.GetFileName(entryAssembly.Location).Equals("update.exe", StringComparison.OrdinalIgnoreCase) && entryAssembly.Location.IndexOf("app-", StringComparison.OrdinalIgnoreCase) == -1 && entryAssembly.Location.IndexOf("SquirrelTemp", StringComparison.OrdinalIgnoreCase) == -1)
|
|
||||||
{
|
|
||||||
return Path.GetFullPath(entryAssembly.Location);
|
|
||||||
}
|
|
||||||
|
|
||||||
entryAssembly = Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly();
|
|
||||||
FileInfo fileInfo = new FileInfo(Path.Combine(Path.GetDirectoryName(entryAssembly.Location), "..\\Update.exe"));
|
|
||||||
if (!fileInfo.Exists)
|
|
||||||
{
|
|
||||||
throw new Exception("Update.exe not found, not a Squirrel-installed app?");
|
|
||||||
}
|
|
||||||
|
|
||||||
return fileInfo.FullName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SearchWindowScreenData> SearchWindowScreens { get; } =
|
public List<SearchWindowScreenData> SearchWindowScreens { get; } =
|
||||||
DropdownDataGeneric<SearchWindowScreens>.GetValues<SearchWindowScreenData>("SearchWindowScreen");
|
DropdownDataGeneric<SearchWindowScreens>.GetValues<SearchWindowScreenData>("SearchWindowScreen");
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue