This commit is contained in:
LukePulverenti 2013-03-02 18:27:12 -05:00
commit 71fe785c6d
9 changed files with 77 additions and 5 deletions

View File

@ -42,6 +42,11 @@ namespace MediaBrowser.Common.Implementations
} }
} }
/// <summary>
/// Gets the path to the system folder
/// </summary>
public string ProgramSystemPath { get { return Path.Combine(ProgramDataPath, "System"); }}
/// <summary> /// <summary>
/// The _data directory /// The _data directory
/// </summary> /// </summary>

View File

@ -9,5 +9,7 @@ namespace MediaBrowser.Common.Constants
public static class Constants public static class Constants
{ {
public const string MBAdminUrl = "http://www.mb3admin.com/admin/"; public const string MBAdminUrl = "http://www.mb3admin.com/admin/";
public const string MBServerPkgName = "MBServer";
public const string MBTheaterPkgName = "MBTheater";
} }
} }

View File

@ -12,6 +12,12 @@ namespace MediaBrowser.Common.Kernel
/// <value>The program data path.</value> /// <value>The program data path.</value>
string ProgramDataPath { get; } string ProgramDataPath { get; }
/// <summary>
/// Gets the path to the program system folder
/// </summary>
/// <value>The program data path.</value>
string ProgramSystemPath { get; }
/// <summary> /// <summary>
/// Gets the folder path to the data directory /// Gets the folder path to the data directory
/// </summary> /// </summary>

View File

@ -104,6 +104,7 @@
<Compile Include="ScheduledTasks\IntervalTrigger.cs" /> <Compile Include="ScheduledTasks\IntervalTrigger.cs" />
<Compile Include="ScheduledTasks\WeeklyTrigger.cs" /> <Compile Include="ScheduledTasks\WeeklyTrigger.cs" />
<Compile Include="Security\ISecurityManager.cs" /> <Compile Include="Security\ISecurityManager.cs" />
<Compile Include="Updates\ApplicationUpdater.cs" />
<Compile Include="Updates\IPackageManager.cs" /> <Compile Include="Updates\IPackageManager.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -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
}
/// <summary>
/// Update the specified application using the specified archive
/// </summary>
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
}
}
}

View File

@ -1,8 +1,11 @@
using MediaBrowser.ClickOnce; using System.IO;
using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Updates;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Server.Implementations;
using Microsoft.Win32; using Microsoft.Win32;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
@ -27,6 +30,25 @@ namespace MediaBrowser.ServerApplication
[STAThread] [STAThread]
public static void Main() 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(); var application = new App();
application.Run(); application.Run();

View File

@ -1,4 +1,5 @@
using MediaBrowser.Api; using MediaBrowser.Api;
using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Implementations; using MediaBrowser.Common.Implementations;
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.Logging;
@ -180,7 +181,7 @@ namespace MediaBrowser.ServerApplication
{ {
var pkgManager = Resolve<IPackageManager>(); var pkgManager = Resolve<IPackageManager>();
var availablePackages = await pkgManager.GetAvailablePackages(Resolve<IHttpClient>(), Resolve<INetworkManager>(), Kernel.SecurityManager, Kernel.ResourcePools, Resolve<IJsonSerializer>(), CancellationToken.None).ConfigureAwait(false); var availablePackages = await pkgManager.GetAvailablePackages(Resolve<IHttpClient>(), Resolve<INetworkManager>(), Kernel.SecurityManager, Kernel.ResourcePools, Resolve<IJsonSerializer>(), 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 } : return version != null ? new CheckForUpdateResult { AvailableVersion = version.version, IsUpdateAvailable = version.version > ApplicationVersion, Package = version } :
new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false }; new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false };

View File

@ -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.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\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.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 xcopy "$(TargetDir)$(TargetFileName).config" "$(SolutionDir)..\Deploy\Server\System\" /y

View File

@ -253,7 +253,4 @@ Global
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
EndGlobal EndGlobal