浏览代码

Put retries on overall extract operation

Eric Reed 12 年之前
父节点
当前提交
8e0722085d
共有 1 个文件被更改,包括 25 次插入12 次删除
  1. 25 12
      MediaBrowser.Installer/MainWindow.xaml.cs

+ 25 - 12
MediaBrowser.Installer/MainWindow.xaml.cs

@@ -265,18 +265,32 @@ namespace MediaBrowser.Installer
             {
                 // Extract
                 lblStatus.Text = "Extracting Package...";
-                try 
-                {
-                    ExtractPackage(archive);
-                    // We're done with it so delete it (this is necessary for update operations)
-                    TryDelete(archive);
-                }
-                catch (Exception e)
+                var retryCount = 0;
+                var success = false;
+                while (!success && retryCount < 3)
                 {
-                    SystemClose("Error Extracting - " + e.GetType().FullName + "\n\n" + e.Message);
-                    // Delete archive even if failed so we don't try again with this one
-                    TryDelete(archive);
-                    return;
+                    try
+                    {
+                        ExtractPackage(archive);
+                        success = true;
+                        // We're done with it so delete it (this is necessary for update operations)
+                        TryDelete(archive);
+                    }
+                    catch (Exception e)
+                    {
+                        if (retryCount < 3)
+                        {
+                            retryCount++;
+                            Thread.Sleep(500);
+                        }
+                        else
+                        {
+                            // Delete archive even if failed so we don't try again with this one
+                            TryDelete(archive);
+                            SystemClose("Error Extracting - " + e.GetType().FullName + "\n\n" + e.Message);
+                            return;
+                        }
+                    }
                 }
 
                 // Create shortcut
@@ -496,7 +510,6 @@ namespace MediaBrowser.Installer
                     {
                         //Rollback
                         RollBack(systemDir, backupDir);
-                        TryDelete(archive); // so we don't try again if its an update
                         throw new ApplicationException(string.Format("Could not extract {0} to {1} after {2} attempts.\n\n{3}", archive, RootPath, retryCount, e.Message));
                     }
                 }