mirror of https://github.com/Jackett/Jackett
Launch tray icon when Windows service updates
This commit is contained in:
parent
b95fbd76a7
commit
47a84775c5
|
@ -7,7 +7,7 @@ namespace Jackett.Common.Services
|
||||||
|
|
||||||
public class TrayLockService : ITrayLockService
|
public class TrayLockService : ITrayLockService
|
||||||
{
|
{
|
||||||
private readonly string EVENT_HANDLE_NAME = "JACKETT.TRAY";
|
private readonly string EVENT_HANDLE_NAME = @"Global\JACKETT.TRAY";
|
||||||
|
|
||||||
private EventWaitHandle GetEventHandle()
|
private EventWaitHandle GetEventHandle()
|
||||||
{
|
{
|
||||||
|
|
|
@ -268,14 +268,14 @@ namespace Jackett.Common.Services
|
||||||
return tempDir;
|
return tempDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartUpdate(string updaterExePath, string installLocation, bool isWindows, bool NoRestart, bool trayWasRunning)
|
private void StartUpdate(string updaterExePath, string installLocation, bool isWindows, bool NoRestart, bool trayIsRunning)
|
||||||
{
|
{
|
||||||
string appType = "Console";
|
string appType = "Console";
|
||||||
//DI once off Owin
|
//DI once off Owin
|
||||||
IProcessService processService = new ProcessService(logger);
|
IProcessService processService = new ProcessService(logger);
|
||||||
IServiceConfigService windowsService = new WindowsServiceConfigService(processService, logger);
|
IServiceConfigService windowsService = new WindowsServiceConfigService(processService, logger);
|
||||||
|
|
||||||
if (isWindows && windowsService.ServiceExists())
|
if (isWindows && windowsService.ServiceExists() && windowsService.ServiceRunning())
|
||||||
{
|
{
|
||||||
appType = "WindowsService";
|
appType = "WindowsService";
|
||||||
}
|
}
|
||||||
|
@ -319,18 +319,25 @@ namespace Jackett.Common.Services
|
||||||
startInfo.Arguments += " --NoRestart";
|
startInfo.Arguments += " --NoRestart";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trayWasRunning)
|
if (trayIsRunning && appType == "Console")
|
||||||
{
|
{
|
||||||
startInfo.Arguments += " --StartTray";
|
startInfo.Arguments += " --StartTray";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isWindows)
|
||||||
|
{
|
||||||
|
lockService.Signal();
|
||||||
|
logger.Info("Signal sent to lock service");
|
||||||
|
Thread.Sleep(2000);
|
||||||
|
}
|
||||||
|
|
||||||
logger.Info($"Starting updater: {startInfo.FileName} {startInfo.Arguments}");
|
logger.Info($"Starting updater: {startInfo.FileName} {startInfo.Arguments}");
|
||||||
var procInfo = Process.Start(startInfo);
|
var procInfo = Process.Start(startInfo);
|
||||||
logger.Info($"Updater started process id: {procInfo.Id}");
|
logger.Info($"Updater started process id: {procInfo.Id}");
|
||||||
if (NoRestart == false)
|
|
||||||
|
if (!NoRestart)
|
||||||
{
|
{
|
||||||
logger.Info("Exiting Jackett..");
|
logger.Info("Exiting Jackett..");
|
||||||
lockService.Signal();
|
|
||||||
//TODO: Remove once off Owin
|
//TODO: Remove once off Owin
|
||||||
if (EnvironmentUtil.IsRunningLegacyOwin)
|
if (EnvironmentUtil.IsRunningLegacyOwin)
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,6 +65,8 @@ namespace Jackett.Tray
|
||||||
StartConsoleApplication();
|
StartConsoleApplication();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updatedVersion = updatedVersion.Equals("yes", StringComparison.OrdinalIgnoreCase) ? EnvironmentUtil.JackettVersion : updatedVersion;
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(updatedVersion))
|
if (!string.IsNullOrWhiteSpace(updatedVersion))
|
||||||
{
|
{
|
||||||
notifyIcon1.BalloonTipTitle = "Jackett";
|
notifyIcon1.BalloonTipTitle = "Jackett";
|
||||||
|
@ -81,6 +83,27 @@ namespace Jackett.Tray
|
||||||
{
|
{
|
||||||
trayLockService.WaitForSignal();
|
trayLockService.WaitForSignal();
|
||||||
logger.Info("Received signal from tray lock service");
|
logger.Info("Received signal from tray lock service");
|
||||||
|
|
||||||
|
if (windowsService.ServiceExists() && windowsService.ServiceRunning())
|
||||||
|
{
|
||||||
|
//We won't be able to start the tray app up again from the updater, as when running via a windows service there is no interaction with the desktop
|
||||||
|
//Fire off a console process that will start the tray 20 seconds later
|
||||||
|
|
||||||
|
string trayExePath = Assembly.GetEntryAssembly().Location;
|
||||||
|
|
||||||
|
var startInfo = new ProcessStartInfo()
|
||||||
|
{
|
||||||
|
Arguments = $"/c timeout 20 > NUL & \"{trayExePath}\" --UpdatedVersion yes",
|
||||||
|
FileName = "cmd.exe",
|
||||||
|
UseShellExecute = true,
|
||||||
|
CreateNoWindow = true,
|
||||||
|
WindowStyle = ProcessWindowStyle.Hidden
|
||||||
|
};
|
||||||
|
|
||||||
|
logger.Info("Starting 20 second delay tray launch as Jackett is running as a Windows service: " + startInfo.FileName + " " + startInfo.Arguments);
|
||||||
|
Process.Start(startInfo);
|
||||||
|
}
|
||||||
|
|
||||||
CloseTrayApplication();
|
CloseTrayApplication();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,9 @@ namespace Jackett.Updater
|
||||||
{
|
{
|
||||||
//The updater starts before Jackett closes
|
//The updater starts before Jackett closes
|
||||||
logger.Info("Pausing for 3 seconds to give Jackett & tray time to shutdown");
|
logger.Info("Pausing for 3 seconds to give Jackett & tray time to shutdown");
|
||||||
System.Threading.Tasks.Task.Delay(3000);
|
System.Threading.Thread.Sleep(3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
processService = new ProcessService(logger);
|
processService = new ProcessService(logger);
|
||||||
windowsService = new WindowsServiceConfigService(processService, logger);
|
windowsService = new WindowsServiceConfigService(processService, logger);
|
||||||
|
|
||||||
|
@ -256,7 +256,7 @@ namespace Jackett.Updater
|
||||||
|
|
||||||
if (options.NoRestart == false)
|
if (options.NoRestart == false)
|
||||||
{
|
{
|
||||||
if (isWindows && (trayRunning || options.StartTray))
|
if (isWindows && (trayRunning || options.StartTray) && !string.Equals(options.Type, "WindowsService", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var startInfo = new ProcessStartInfo()
|
var startInfo = new ProcessStartInfo()
|
||||||
{
|
{
|
||||||
|
@ -275,7 +275,7 @@ namespace Jackett.Updater
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.Equals(options.Type, "WindowsService", StringComparison.InvariantCultureIgnoreCase))
|
if (string.Equals(options.Type, "WindowsService", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
logger.Info("Starting Windows service");
|
logger.Info("Starting Windows service");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue