diff --git a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs
index d94d79c753..37bd622004 100644
--- a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs
+++ b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs
@@ -42,6 +42,11 @@ namespace MediaBrowser.Common.Implementations
}
}
+ ///
+ /// Gets the path to the system folder
+ ///
+ public string ProgramSystemPath { get { return Path.Combine(ProgramDataPath, "System"); }}
+
///
/// The _data directory
///
diff --git a/MediaBrowser.Common/Constants/Constants.cs b/MediaBrowser.Common/Constants/Constants.cs
index 676518737d..c1c79d1996 100644
--- a/MediaBrowser.Common/Constants/Constants.cs
+++ b/MediaBrowser.Common/Constants/Constants.cs
@@ -9,5 +9,7 @@ namespace MediaBrowser.Common.Constants
public static class Constants
{
public const string MBAdminUrl = "http://www.mb3admin.com/admin/";
+ public const string MBServerPkgName = "MBServer";
+ public const string MBTheaterPkgName = "MBTheater";
}
}
diff --git a/MediaBrowser.Common/Kernel/IApplicationPaths.cs b/MediaBrowser.Common/Kernel/IApplicationPaths.cs
index abb7836423..52c3b199d8 100644
--- a/MediaBrowser.Common/Kernel/IApplicationPaths.cs
+++ b/MediaBrowser.Common/Kernel/IApplicationPaths.cs
@@ -12,6 +12,12 @@ namespace MediaBrowser.Common.Kernel
/// The program data path.
string ProgramDataPath { get; }
+ ///
+ /// Gets the path to the program system folder
+ ///
+ /// The program data path.
+ string ProgramSystemPath { get; }
+
///
/// Gets the folder path to the data directory
///
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index d2bfcc38f3..284649b53d 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -104,6 +104,7 @@
+
diff --git a/MediaBrowser.Common/Updates/ApplicationUpdater.cs b/MediaBrowser.Common/Updates/ApplicationUpdater.cs
new file mode 100644
index 0000000000..e157c344b7
--- /dev/null
+++ b/MediaBrowser.Common/Updates/ApplicationUpdater.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+using MediaBrowser.Common.Kernel;
+
+namespace MediaBrowser.Common.Updates
+{
+ public enum MBApplication
+ {
+ MBServer,
+ MBTheater
+ }
+
+ ///
+ /// Update the specified application using the specified archive
+ ///
+ public class ApplicationUpdater
+ {
+ private const string UpdaterExe = "Mediabrowser.Installer.exe";
+ public void UpdateApplication(MBApplication app, IApplicationPaths appPaths, string archive)
+ {
+ // Use our installer passing it the specific archive
+ // We need to copy to a temp directory and execute it there
+ var source = Path.Combine(appPaths.ProgramSystemPath, UpdaterExe);
+ var target = Path.Combine(Path.GetTempPath(), UpdaterExe);
+ var product = app == MBApplication.MBTheater ? "mbt" : "server";
+ File.Copy(source, target, true);
+ Process.Start(UpdaterExe, string.Format("product={0} archive=\"{1}\" caller={2}", product, archive, Process.GetCurrentProcess().Id));
+
+ // That's it. The installer will do the work once we exit
+ }
+ }
+}
diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs
index e9baa96e7f..dddd877827 100644
--- a/MediaBrowser.ServerApplication/App.xaml.cs
+++ b/MediaBrowser.ServerApplication/App.xaml.cs
@@ -1,8 +1,11 @@
-using MediaBrowser.ClickOnce;
+using System.IO;
+using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Updates;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Server.Implementations;
using Microsoft.Win32;
using System;
using System.Diagnostics;
@@ -27,6 +30,25 @@ namespace MediaBrowser.ServerApplication
[STAThread]
public static void Main()
{
+ // Look for the existence of an update archive
+ var appPaths = new ServerApplicationPaths();
+ var updateArchive = Path.Combine(appPaths.TempUpdatePath, Constants.MBServerPkgName + ".zip");
+ if (File.Exists(updateArchive))
+ {
+ // Update is there - execute update
+ try
+ {
+ new ApplicationUpdater().UpdateApplication(MBApplication.MBServer, appPaths, updateArchive);
+
+ // And just let the app exit so it can update
+ return;
+ }
+ catch (Exception e)
+ {
+ MessageBox.Show(string.Format("Error attempting to update application.\n\n{0}\n\n{1}", e.GetType().Name, e.Message));
+ }
+ }
+
var application = new App();
application.Run();
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs
index ce4aa5ebd5..6c39d0b6b2 100644
--- a/MediaBrowser.ServerApplication/ApplicationHost.cs
+++ b/MediaBrowser.ServerApplication/ApplicationHost.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Api;
+using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Implementations;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Implementations.Logging;
@@ -180,7 +181,7 @@ namespace MediaBrowser.ServerApplication
{
var pkgManager = Resolve();
var availablePackages = await pkgManager.GetAvailablePackages(Resolve(), Resolve(), Kernel.SecurityManager, Kernel.ResourcePools, Resolve(), CancellationToken.None).ConfigureAwait(false);
- var version = Kernel.InstallationManager.GetLatestCompatibleVersion(availablePackages, "MBServer", Kernel.Configuration.SystemUpdateLevel);
+ var version = Kernel.InstallationManager.GetLatestCompatibleVersion(availablePackages, Constants.MBServerPkgName, Kernel.Configuration.SystemUpdateLevel);
return version != null ? new CheckForUpdateResult { AvailableVersion = version.version, IsUpdateAvailable = version.version > ApplicationVersion, Package = version } :
new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false };
diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
index 16c6570971..158fc05608 100644
--- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
+++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
@@ -375,6 +375,7 @@ xcopy "$(SolutionDir)Mediabrowser.Uninstaller\bin\Release\MediaBrowser.Uninstall
xcopy "$(SolutionDir)Mediabrowser.Uninstaller.Execute\bin\Release\MediaBrowser.Uninstaller.Execute.exe.config" "$(SolutionDir)..\Deploy\Server\System\" /y
xcopy "$(SolutionDir)Mediabrowser.Uninstaller\bin\Release\MediaBrowser.Uninstaller.exe" "$(SolutionDir)..\Deploy\Server\System\" /y
xcopy "$(SolutionDir)Mediabrowser.Uninstaller.Execute\bin\Release\MediaBrowser.Uninstaller.Execute.exe" "$(SolutionDir)..\Deploy\Server\System\" /y
+xcopy "$(SolutionDir)Mediabrowser.Installer\bin\Release\MediaBrowser.Installer.exe" "$(SolutionDir)..\Deploy\Server\System\" /y
xcopy "$(TargetDir)$(TargetFileName).config" "$(SolutionDir)..\Deploy\Server\System\" /y
diff --git a/MediaBrowser.sln b/MediaBrowser.sln
index 0fe54d0059..b473b20625 100644
--- a/MediaBrowser.sln
+++ b/MediaBrowser.sln
@@ -253,7 +253,4 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
- GlobalSection(Performance) = preSolution
- HasPerformanceSessions = true
- EndGlobalSection
EndGlobal