Browse Source

Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser

LukePulverenti 12 years ago
parent
commit
56447db586

+ 67 - 6
MediaBrowser.Installer/MainWindow.xaml.cs

@@ -76,10 +76,38 @@ namespace MediaBrowser.Installer
 
 
         protected void GetArgs()
         protected void GetArgs()
         {
         {
-            var product = ConfigurationManager.AppSettings["product"] ?? "server";
-            PackageClass = (PackageVersionClass) Enum.Parse(typeof (PackageVersionClass), ConfigurationManager.AppSettings["class"] ?? "Release");
+            //cmd line args should be name/value pairs like: product=server archive="c:\.." caller=34552
             var cmdArgs = Environment.GetCommandLineArgs();
             var cmdArgs = Environment.GetCommandLineArgs();
-            Archive = cmdArgs.Length > 1 ? cmdArgs[1] : null;
+            var args = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+            foreach (var pair in cmdArgs)
+            {
+                var nameValue = pair.Split('=');
+                if (nameValue.Length == 2)
+                {
+                    args[nameValue[0]] = nameValue[1];
+                }
+            }
+
+            Archive = args.GetValueOrDefault("archive", null);
+
+            var product = args.GetValueOrDefault("product", null) ?? ConfigurationManager.AppSettings["product"] ?? "server";
+            PackageClass = (PackageVersionClass) Enum.Parse(typeof (PackageVersionClass), args.GetValueOrDefault("class", null) ?? ConfigurationManager.AppSettings["class"] ?? "Release");
+            PackageVersion = new Version(args.GetValueOrDefault("version", "4.0"));
+
+            var callerId = args.GetValueOrDefault("caller", null);
+            if (callerId != null)
+            {
+                // Wait for our caller to exit
+                try
+                {
+                    var process = Process.GetProcessById(Convert.ToInt32(callerId));
+                    process.WaitForExit();
+                }
+                catch (ArgumentException)
+                {
+                    // wasn't running
+                }
+            }
 
 
             switch (product.ToLower())
             switch (product.ToLower())
             {
             {
@@ -108,13 +136,15 @@ namespace MediaBrowser.Installer
         /// <returns></returns>
         /// <returns></returns>
         protected async Task DoInstall(string archive)
         protected async Task DoInstall(string archive)
         {
         {
-            lblStatus.Text = string.Format("Downloading {0}...", FriendlyName);
+            lblStatus.Text = string.Format("Installing {0}...", FriendlyName);
 
 
             // Determine Package version
             // Determine Package version
             var version = await GetPackageVersion();
             var version = await GetPackageVersion();
 
 
             // Now try and shut down the server if that is what we are installing and it is running
             // Now try and shut down the server if that is what we are installing and it is running
-            if (PackageName == "MBServer" && Process.GetProcessesByName("mediabrowser.serverapplication").Length != 0)
+            var procs = Process.GetProcessesByName("mediabrowser.serverapplication");
+            var server = procs.Length > 0 ? procs[0] : null;
+            if (PackageName == "MBServer" && server != null)
             {
             {
                 lblStatus.Text = "Shutting Down Media Browser Server...";
                 lblStatus.Text = "Shutting Down Media Browser Server...";
                 using (var client = new WebClient())
                 using (var client = new WebClient())
@@ -122,6 +152,14 @@ namespace MediaBrowser.Installer
                     try
                     try
                     {
                     {
                         client.UploadString("http://localhost:8096/mediabrowser/System/Shutdown", "");
                         client.UploadString("http://localhost:8096/mediabrowser/System/Shutdown", "");
+                        try
+                        {
+                            server.WaitForExit();
+                        }
+                        catch (ArgumentException)
+                        {
+                            // already gone
+                        }
                     }
                     }
                     catch (WebException e)
                     catch (WebException e)
                     {
                     {
@@ -174,6 +212,19 @@ namespace MediaBrowser.Installer
             try 
             try 
             {
             {
                 ExtractPackage(archive);
                 ExtractPackage(archive);
+                // We're done with it so delete it (this is necessary for update operations)
+                try
+                {
+                    File.Delete(archive);
+                }
+                catch (FileNotFoundException)
+                {
+                }
+                catch (Exception e)
+                {
+
+                    SystemClose("Error Removing Archive - " + e.GetType().FullName + "\n\n" + e.Message);
+                }
             }
             }
             catch (Exception e)
             catch (Exception e)
             {
             {
@@ -278,7 +329,17 @@ namespace MediaBrowser.Installer
         {
         {
             // Delete old content of system
             // Delete old content of system
             var systemDir = Path.Combine(RootPath, "system");
             var systemDir = Path.Combine(RootPath, "system");
-            if (Directory.Exists(systemDir)) Directory.Delete(systemDir, true);
+            if (Directory.Exists(systemDir))
+            {
+                try
+                {
+                    Directory.Delete(systemDir, true);
+                }
+                catch
+                {
+                    // we tried...
+                }
+            }
 
 
             // And extract
             // And extract
             using (var fileStream = File.OpenRead(archive))
             using (var fileStream = File.OpenRead(archive))

+ 1 - 1
MediaBrowser.Installer/MediaBrowser.Installer.csproj

@@ -29,7 +29,7 @@
     <PublisherName>Media Browser Team</PublisherName>
     <PublisherName>Media Browser Team</PublisherName>
     <SuiteName>Media Browser</SuiteName>
     <SuiteName>Media Browser</SuiteName>
     <OpenBrowserOnPublish>false</OpenBrowserOnPublish>
     <OpenBrowserOnPublish>false</OpenBrowserOnPublish>
-    <ApplicationRevision>32</ApplicationRevision>
+    <ApplicationRevision>34</ApplicationRevision>
     <ApplicationVersion>0.1.1.%2a</ApplicationVersion>
     <ApplicationVersion>0.1.1.%2a</ApplicationVersion>
     <UseApplicationTrust>false</UseApplicationTrust>
     <UseApplicationTrust>false</UseApplicationTrust>
     <PublishWizardCompleted>true</PublishWizardCompleted>
     <PublishWizardCompleted>true</PublishWizardCompleted>

+ 30 - 2
MediaBrowser.Uninstaller.Execute/MainWindow.xaml.cs

@@ -18,10 +18,28 @@ namespace MediaBrowser.Uninstaller.Execute
 
 
         public MainWindow()
         public MainWindow()
         {
         {
-            Thread.Sleep(800); // be sure our caller is shut down
 
 
             var args = Environment.GetCommandLineArgs();
             var args = Environment.GetCommandLineArgs();
             var product = args.Length > 1 ? args[1] : "server";
             var product = args.Length > 1 ? args[1] : "server";
+            var callerId = args.Length > 2 ? args[2] : null;
+            if (callerId != null)
+            {
+                // Wait for our caller to exit
+                try
+                {
+                    var process = Process.GetProcessById(Convert.ToInt32(callerId));
+                    process.WaitForExit();
+                }
+                catch (ArgumentException)
+                {
+                    // wasn't running
+                }
+            }
+            else
+            {
+                Thread.Sleep(1000); // crude method
+            }
+
             InitializeComponent();
             InitializeComponent();
 
 
 
 
@@ -79,7 +97,9 @@ namespace MediaBrowser.Uninstaller.Execute
             if (Product == "Server")
             if (Product == "Server")
             {
             {
                 RemoveShortcut(Path.Combine(startMenu, "MB Dashboard.lnk"));
                 RemoveShortcut(Path.Combine(startMenu, "MB Dashboard.lnk"));
-                if (Process.GetProcessesByName("mediabrowser.serverapplication").Length != 0)
+                var procs = Process.GetProcessesByName("mediabrowser.serverapplication");
+                var server = procs.Length > 0 ? procs[0] : null;
+                if (server != null)
                 {
                 {
                     using (var client = new WebClient())
                     using (var client = new WebClient())
                     {
                     {
@@ -87,6 +107,14 @@ namespace MediaBrowser.Uninstaller.Execute
                         try
                         try
                         {
                         {
                             client.UploadString("http://localhost:8096/mediabrowser/system/shutdown", "");
                             client.UploadString("http://localhost:8096/mediabrowser/system/shutdown", "");
+                            try
+                            {
+                                server.WaitForExit();
+                            }
+                            catch (ArgumentException)
+                            {
+                                // already gone
+                            }
                         }
                         }
                         catch (WebException ex)
                         catch (WebException ex)
                         {
                         {

+ 4 - 1
MediaBrowser.Uninstaller/Program.cs

@@ -24,8 +24,11 @@ namespace MediaBrowser.Uninstaller
                 var sourceDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
                 var sourceDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
                 File.WriteAllBytes(tempExe, File.ReadAllBytes(Path.Combine(sourceDir, "MediaBrowser.Uninstaller.Execute.exe")));
                 File.WriteAllBytes(tempExe, File.ReadAllBytes(Path.Combine(sourceDir, "MediaBrowser.Uninstaller.Execute.exe")));
                 File.Copy(Path.Combine(sourceDir, "MediaBrowser.Uninstaller.Execute.exe.config"), tempConfig, true);
                 File.Copy(Path.Combine(sourceDir, "MediaBrowser.Uninstaller.Execute.exe.config"), tempConfig, true);
+
+                //get our pid to pass to the uninstaller so it can wait for us to exit
+                var pid = Process.GetCurrentProcess().Id;
                 //kick off the copy
                 //kick off the copy
-                Process.Start(tempExe, product);
+                Process.Start(tempExe, product + " " + pid);
                 //and shut down
                 //and shut down
             }
             }
         }
         }