diff --git a/MediaBrowser.Model/System/SystemInfo.cs b/MediaBrowser.Model/System/SystemInfo.cs index d736298b8f..9491139dbc 100644 --- a/MediaBrowser.Model/System/SystemInfo.cs +++ b/MediaBrowser.Model/System/SystemInfo.cs @@ -67,7 +67,13 @@ namespace MediaBrowser.Model.System /// /// true if this instance can self restart; otherwise, false. public bool CanSelfRestart { get; set; } - + + /// + /// Gets or sets a value indicating whether this instance can self update. + /// + /// true if this instance can self update; otherwise, false. + public bool CanSelfUpdate { get; set; } + /// /// Gets or sets plugin assemblies that failed to load. /// diff --git a/MediaBrowser.Mono.userprefs b/MediaBrowser.Mono.userprefs index a4119f6271..f07c9fbcf0 100644 --- a/MediaBrowser.Mono.userprefs +++ b/MediaBrowser.Mono.userprefs @@ -1,10 +1,13 @@  - + + + + diff --git a/MediaBrowser.Server.Mono/Native/NativeApp.cs b/MediaBrowser.Server.Mono/Native/NativeApp.cs index 4cc2dcebf3..b8c4447e5f 100644 --- a/MediaBrowser.Server.Mono/Native/NativeApp.cs +++ b/MediaBrowser.Server.Mono/Native/NativeApp.cs @@ -21,6 +21,30 @@ namespace MediaBrowser.ServerApplication.Native public static void Restart() { MainClass.Restart (); - } + } + + /// + /// Determines whether this instance [can self restart]. + /// + /// true if this instance [can self restart]; otherwise, false. + public static bool CanSelfRestart + { + get + { + return MainClass.CanSelfRestart; + } + } + + /// + /// Gets a value indicating whether this instance can self update. + /// + /// true if this instance can self update; otherwise, false. + public static bool CanSelfUpdate + { + get + { + return MainClass.CanSelfUpdate; + } + } } } diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 2e86afad70..fddf9706d0 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -82,6 +82,30 @@ namespace MediaBrowser.Server.Mono return new ServerApplicationPaths(); } + /// + /// Determines whether this instance [can self restart]. + /// + /// true if this instance [can self restart]; otherwise, false. + public static bool CanSelfRestart + { + get + { + return false; + } + } + + /// + /// Gets a value indicating whether this instance can self update. + /// + /// true if this instance can self update; otherwise, false. + public static bool CanSelfUpdate + { + get + { + return false; + } + } + private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager) { // TODO: Show splash here diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index b74fd8a739..ed9179b076 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -530,7 +530,7 @@ namespace MediaBrowser.ServerApplication #if DEBUG return false; #endif - return true; + return NativeApp.CanSelfUpdate; } } @@ -603,7 +603,8 @@ namespace MediaBrowser.ServerApplication MacAddress = GetMacAddress(), HttpServerPortNumber = ServerConfigurationManager.Configuration.HttpServerPortNumber, OperatingSystem = Environment.OSVersion.ToString(), - CanSelfRestart = CanSelfRestart + CanSelfRestart = CanSelfRestart, + CanSelfUpdate = CanSelfUpdate }; } diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index b4b2cf1071..f61b0f1d13 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -114,7 +114,7 @@ namespace MediaBrowser.ServerApplication /// true if [is already running] [the specified current process]; otherwise, false. private static bool IsAlreadyRunning(Process currentProcess) { - var runningPath = Process.GetCurrentProcess().MainModule.FileName; + var runningPath = currentProcess.MainModule.FileName; var duplicate = Process.GetProcesses().FirstOrDefault(i => { @@ -151,13 +151,11 @@ namespace MediaBrowser.ServerApplication { if (runAsService) { -#if (RELEASE) var systemPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); var programDataPath = Path.GetDirectoryName(systemPath); return new ServerApplicationPaths(programDataPath); -#endif } return new ServerApplicationPaths(); @@ -171,7 +169,19 @@ namespace MediaBrowser.ServerApplication { get { - return true; + return !_isRunningAsService; + } + } + + /// + /// Gets a value indicating whether this instance can self update. + /// + /// true if this instance can self update; otherwise, false. + public static bool CanSelfUpdate + { + get + { + return !_isRunningAsService; } } @@ -188,6 +198,9 @@ namespace MediaBrowser.ServerApplication logger.Info("Server: {0}", Environment.MachineName); logger.Info("Operating system: {0}", Environment.OSVersion.ToString()); logger.Info("Program data path: {0}", appPaths.ProgramDataPath); + + var runningPath = Process.GetCurrentProcess().MainModule.FileName; + logger.Info("Executable: {0}", runningPath); } /// @@ -276,11 +289,6 @@ namespace MediaBrowser.ServerApplication { ManagedInstallerClass.InstallHelper(new[] { runningPath }); - using (var process = Process.Start("cmd.exe", "/c sc failure " + BackgroundService.Name + " reset= 0 actions= restart/1000/restart/1000/restart/60000")) - { - process.WaitForExit(); - } - logger.Info("Service installation succeeded"); } catch (Exception ex) @@ -458,19 +466,11 @@ namespace MediaBrowser.ServerApplication if (!_isRunningAsService) { - _logger.Info("Starting server application"); - RestartWindowsApplication(); - } - else - { - _logger.Info("Calling Enviornment.Exit to tell Windows to restart the server."); - Environment.Exit(1); - } - } + _logger.Info("Executing windows forms restart"); + System.Windows.Forms.Application.Restart(); - private static void RestartWindowsApplication() - { - System.Windows.Forms.Application.Restart(); + ShutdownWindowsApplication(); + } } private static void ShutdownWindowsApplication() diff --git a/MediaBrowser.ServerApplication/Native/NativeApp.cs b/MediaBrowser.ServerApplication/Native/NativeApp.cs index 0e114b166d..c0d3e876a5 100644 --- a/MediaBrowser.ServerApplication/Native/NativeApp.cs +++ b/MediaBrowser.ServerApplication/Native/NativeApp.cs @@ -33,5 +33,17 @@ namespace MediaBrowser.ServerApplication.Native return MainStartup.CanSelfRestart; } } + + /// + /// Gets a value indicating whether this instance can self update. + /// + /// true if this instance can self update; otherwise, false. + public static bool CanSelfUpdate + { + get + { + return MainStartup.CanSelfUpdate; + } + } } }