OSDN Git Service

na-get-lib,旧方式のタスク(NaGetTaskSet)系のクラスを削除。
[applistation/AppliStation.git] / na-get-lib / NaGet.SubCommands / NaGetInstall.cs
diff --git a/na-get-lib/NaGet.SubCommands/NaGetInstall.cs b/na-get-lib/NaGet.SubCommands/NaGetInstall.cs
deleted file mode 100644 (file)
index 9c1fb58..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-using System;\r
-using System.Collections.Generic;\r
-using NaGet.Packages.Install;\r
-using NaGet.Packages;\r
-using NaGet.Net;\r
-using NaGet.Tasks;\r
-using NaGet.InteropServices;\r
-\r
-namespace NaGet.SubCommands\r
-{\r
-       public class NaGetInstall : NaGetTaskSet\r
-       {\r
-               private bool done = false;\r
-               \r
-               private int currentTaskSetIndex = -1;\r
-               \r
-               private PackageListsManager pkgListMan;\r
-               \r
-               /// <summary>\r
-               /// ダウンロードに使うダウンローダオブジェクト\r
-               /// </summary>\r
-               public Downloader Downloader {\r
-                       get {\r
-                               if (downloader == null) {\r
-                                       downloader = new Downloader();\r
-                                       downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
-                                               if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
-                                                       RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));\r
-                                               }\r
-                                       };\r
-                               }\r
-                               return downloader;\r
-                       }\r
-               }\r
-               \r
-               private Downloader downloader;\r
-               \r
-               private bool packageInstallerDownloaded = false;\r
-               \r
-               public override bool Cancelable {\r
-                       get { return ! done; }\r
-               }\r
-               \r
-               /// <summary>\r
-               /// インストールするパッケージ\r
-               /// </summary>\r
-               public Installation[] Installations;\r
-               \r
-               /// <summary>\r
-               /// コンストラクタ\r
-               /// </summary>\r
-               /// <param name="pkgs">インストールするパッケージ</param>\r
-               public NaGetInstall(PackageListsManager pkgListMan, Package[] pkgs)\r
-                       : this(pkgListMan, Installation.ConvertInstallations(pkgs))\r
-               {\r
-               }\r
-               \r
-               /// <summary>\r
-               /// コンストラクタ\r
-               /// </summary>\r
-               /// <param name="installations">インストール処理の配列</param>\r
-               public NaGetInstall(PackageListsManager pkgMan, Installation[] installations)\r
-               {\r
-                       pkgListMan = pkgMan;\r
-                       \r
-                       Installations = installations;\r
-                       initializeMainTaskSetNames();\r
-               }\r
-               \r
-               private void initializeMainTaskSetNames()\r
-               {\r
-                       taskSetNames = new List<string>();\r
-                       \r
-                       for (int i =0; i < Installations.Length; i++) {\r
-                               taskSetNames.Add(string.Format("取得: {0}", Installations[i].ToString()));\r
-                               taskSetNames.Add(string.Format("ウイルススキャン: {0}", Installations[i].ToString()));\r
-                       }\r
-                       taskSetNames.Add("インストーラーの検証");\r
-                       for (int i =0; i < Installations.Length; i++) {\r
-                               taskSetNames.Add(string.Format("インストール: {0}", Installations[i].ToString()));\r
-                       }\r
-                       taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.ArchiveInstalledPackageListFile));\r
-                       taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.SystemInstalledPackageListFile));\r
-               }\r
-                               \r
-               public override void Run()\r
-               {\r
-                       currentTaskSetIndex = 0;\r
-                       RaiseTaskSetEvent(TaskEventType.STARTED, "インストール処理開始");\r
-                       \r
-                       {\r
-                               // ハッシュ非適合なインストーラの表\r
-                               List<Installation> invalidInstallers = null;\r
-                               \r
-                               do {\r
-                                       currentTaskSetIndex = 0;\r
-                                       packageInstallerDownloaded = false;\r
-                                       \r
-                                       runDownloadAndVirusCheckInstallers();\r
-                                       if (done) return; // もしrunDownloadInstallers()内でエラー終了していたなら終了\r
-                                       \r
-                                       packageInstallerDownloaded = true;\r
-                                       \r
-                                       \r
-                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                                       \r
-                                       // ハッシュの壊れているインストーラーを取得\r
-                                       invalidInstallers = runCheckHashForInstaller();\r
-                                       \r
-                                       // ハッシュが壊れているときの対策\r
-                                       if (invalidInstallers.Count > 0) {\r
-                                               System.Text.StringBuilder invalidInstallerNames = new System.Text.StringBuilder();\r
-                                               foreach (Installation invalidInst in invalidInstallers) {\r
-                                                       invalidInstallerNames.AppendFormat(" - {0}\n", invalidInst.ToString());\r
-                                               }\r
-                                               \r
-                                               string msg = string.Format("以下の{0}個のパッケージでファイルが壊れている可能性があります。\n{1}\n強制的にインストールを続行しますか?",\r
-                                                                          invalidInstallers.Count, invalidInstallerNames.ToString());\r
-                                               NaGetTaskQueryResult result = NaGetTaskQueryResult.CANCEL;\r
-                                               \r
-                                               if (!cancelCalled) {\r
-                                                       result = RaiseTaskSetQueryEvent(msg, NaGetTaskQueryResult.CONTINUE\r
-                                                                                       | NaGetTaskQueryResult.RETRY\r
-                                                                                       | NaGetTaskQueryResult.CANCEL);\r
-                                               }\r
-                                               \r
-                                               switch (result) {\r
-                                                       case NaGetTaskQueryResult.CONTINUE:\r
-                                                               RaiseTaskSetEvent(TaskEventType.WARNING, "ハッシュの非整合を無視してインストールを継続");\r
-                                                               invalidInstallers.Clear(); // ハッシュ非適合パッケージを強制的に抹消\r
-                                                               break;\r
-                                                       case NaGetTaskQueryResult.RETRY:\r
-                                                               RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロード処理を再試行");\r
-                                                               \r
-                                                               foreach (Installation invalidInst in invalidInstallers) {\r
-                                                                       invalidInst.RemoveDownloadedFile();\r
-                                                               }\r
-                                                               \r
-                                                               break;\r
-                                                       //case NaGetTaskQueryResult.CANCEL:\r
-                                                       default:\r
-                                                               RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
-                                                               done = true;\r
-                                                               return;\r
-                                               }\r
-                                       }\r
-                                       \r
-                                       // もしハッシュが不適合なソフトがあるならばダウンロード処理からやり直す\r
-                               } while (invalidInstallers == null || invalidInstallers.Count > 0);\r
-                               RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                               currentTaskSetIndex ++;\r
-                       }\r
-                       \r
-                       foreach (Installation inst in Installations) {\r
-                               string installTaskMsg = taskSetNames[currentTaskSetIndex];\r
-                               if (inst.Silent && (!inst.SupportsSilentOnly)) {\r
-                                       installTaskMsg += " (サイレントインストール)";\r
-                               }\r
-                               \r
-                               RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, installTaskMsg);\r
-                               \r
-                               try {\r
-                                       \r
-                                       inst.ErrorDataReceived += this.ReceivedErrorData;\r
-                                       inst.OutputDataReceived += this.ReceivedOutputData;\r
-                                       int exitCode = inst.Install();\r
-                                       if (exitCode != 0) {\r
-                                               RaiseTaskSetEvent(TaskEventType.WARNING, "インストールが正常に終えていない可能性があります。プロセスの終了コード:"+exitCode);\r
-                                       }\r
-                                       \r
-                                       pkgListMan.WriteInstallationLog(inst);\r
-                               } catch (Exception e) {\r
-                                       RaiseTaskSetEvent(TaskEventType.ERROR, e.Message);\r
-                                       done = true;\r
-                                       return;\r
-                               }\r
-                               RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, installTaskMsg);\r
-                               currentTaskSetIndex ++;\r
-                               \r
-                               if (cancelCalled) {\r
-                                       RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
-                                       done = true;\r
-                                       return;\r
-                               }\r
-                       }\r
-                       \r
-                       runLocalUpdate();\r
-                       \r
-                       done = true;\r
-                       \r
-                       RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);\r
-               }\r
-               \r
-               \r
-               /// <summary>\r
-               /// 処理内容のダウンロード・ウイルススキャン部分のサブルーチン\r
-               /// </summary>\r
-               private void runDownloadAndVirusCheckInstallers()\r
-               {\r
-                       using (DownloadScannerService scanner = new DownloadScannerService()) {\r
-                               scanner.Init();\r
-                               foreach (Installation inst in Installations) {\r
-                                       if (! inst.IsInstallablePackage()) {\r
-                                               string msg = string.Format("{0}はインストールすることができません", inst.ToString());\r
-                                               \r
-                                               RaiseTaskSetEvent(TaskEventType.ERROR, msg);\r
-                                               done = true;\r
-                                               return;\r
-                                       }\r
-                                       \r
-                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                                       \r
-                                       if (! inst.Downloaded) {\r
-                                               try {\r
-                                                       inst.Download(Downloader);\r
-                                               } catch (TaskCanceledException) {\r
-                                                       RaiseTaskSetEvent(TaskEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");\r
-                                                       done = true;\r
-                                                       return;\r
-                                               } catch (System.Net.WebException e) {\r
-                                                       RaiseTaskSetEvent(TaskEventType.WARNING, e.Message);\r
-                                                       if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {\r
-                                                               RaiseTaskSetEvent(TaskEventType.ERROR, "ネットワークに接続されていません。");\r
-                                                       } else {\r
-                                                               RaiseTaskSetEvent(TaskEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
-                                                       }\r
-                                                       done = true;\r
-                                                       return;\r
-                                               } catch (Exception e) {\r
-                                                       RaiseTaskSetEvent(TaskEventType.ERROR, e.Message);\r
-                                                       done = true;\r
-                                                       return;\r
-                                               }\r
-                                       }\r
-                                       \r
-                                       if (! inst.Downloaded) { // ダウンロードが完了せずに終わった=失敗=エラー\r
-                                               RaiseTaskSetEvent(TaskEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));\r
-                                               done = true;\r
-                                               return;\r
-                                       }\r
-                                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                                       currentTaskSetIndex ++;\r
-                                       \r
-                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                                       if (! NaGet.Env.EnableScanInstallerFile) {\r
-                                               RaiseTaskSetEvent(TaskEventType.INFO, "ウイルススキャンを行わない設定のため、ダウンロードしたファイルはウイルススキャンされませんでした");\r
-                                       } else if (!scanner.HasScanner) {\r
-                                               RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
-                                       } else {\r
-                                               try {\r
-                                                       DownloadScannerResult result = inst.ScanInstallerFile(scanner);\r
-                                                       \r
-                                                       switch (result) {\r
-                                                               case DownloadScannerResult.ScannerNotFound:\r
-                                                                       RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
-                                                                       break;\r
-                                                               case DownloadScannerResult.InfectedAndCleaned:\r
-                                                                       RaiseTaskSetEvent(TaskEventType.ERROR,\r
-                                                                                 "インストーラーファイルからウイルス感染が検出されたため、削除されました。");\r
-                                                                       done = true;\r
-                                                                       return;\r
-                                                               case DownloadScannerResult.InfectedButNotCleaned:\r
-                                                                       RaiseTaskSetEvent(TaskEventType.ERROR,\r
-                                                                                 "インストーラーファイルからウイルス感染が検出されました。");\r
-                                                                       done = true;\r
-                                                                       break;\r
-                                                               case DownloadScannerResult.ErrorNotFound:\r
-                                                                       throw new System.IO.FileNotFoundException(string.Empty);\r
-                                                                       //break;\r
-                                                       }\r
-                                                       \r
-                                               } catch (System.Runtime.InteropServices.COMException ex) {\r
-                                                       RaiseTaskSetEvent(TaskEventType.WARNING,\r
-                                                                         string.Format("{0} (E{1})", ex.Message, ex.ErrorCode));\r
-                                               } catch (System.IO.FileNotFoundException ex) {\r
-                                                       if (ex.InnerException is System.Runtime.InteropServices.COMException) {\r
-                                                               RaiseTaskSetEvent(TaskEventType.WARNING,\r
-                                                                                 string.Format("{0} (E{1})", ex.InnerException.Message, ((System.Runtime.InteropServices.COMException) ex.InnerException).ErrorCode));\r
-                                                       }\r
-                                                       RaiseTaskSetEvent(TaskEventType.ERROR, "インストーラーファイルがウイルススキャナーによって削除されました。");\r
-                                                       done = true;\r
-                                                       return;\r
-                                               }\r
-                                       }\r
-                                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                                       currentTaskSetIndex ++;\r
-                                       \r
-                                       if (cancelCalled) {\r
-                                               RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
-                                               done = true;\r
-                                               return;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               \r
-               /// <summary>\r
-               /// ダウンロードしたパッケージが整合したか否かハッシュでチェック\r
-               /// </summary>\r
-               /// <returns>整合しなかったインストーラーのリスト</returns>\r
-               private List<Installation> runCheckHashForInstaller()\r
-               {\r
-                       List<Installation> invalidInstallers = new List<Installation>();\r
-                       \r
-                       int i = 0;\r
-                       foreach (Installation inst in Installations) {\r
-                               float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/taskSetNames.Count;\r
-                               \r
-                               if (inst.GetRegisteredHashCount() > 0) {\r
-                                       RaiseTaskSetEvent(TaskEventType.INFO, "検証: "+inst.ToString(), percent);\r
-                                       \r
-                                       if (inst.IsInstallablePackage() && inst.VerifyHashValues() == false) {\r
-                                               invalidInstallers.Add(inst);\r
-                                               RaiseTaskSetEvent(TaskEventType.WARNING, "検証: "+inst.ToString() + " 非整合", percent);\r
-                                       } else {\r
-                                               RaiseTaskSetEvent(TaskEventType.INFO, "検証: "+inst.ToString() + " OK", percent);\r
-                                       }\r
-                               }\r
-                               i++;\r
-                       }\r
-                       \r
-                       return invalidInstallers;\r
-               }\r
-               \r
-               private void runLocalUpdate()\r
-               {\r
-                       // インストールトリストの更新\r
-                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                       pkgListMan.DetectInstalledPkgs();\r
-                       pkgListMan.SaveInstalledPackageList();\r
-                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                       currentTaskSetIndex++;\r
-               \r
-                       // システムにインストールされているリストの更新\r
-                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                       pkgListMan.DetectSystemInstalledPkgs();\r
-                       pkgListMan.SaveSystemInstalledPackageList();\r
-                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
-                       currentTaskSetIndex++;\r
-               }\r
-               \r
-               public override bool Done {\r
-                       get { return done; }\r
-               }\r
-               \r
-               public override int CurrentTaskSetIndex {\r
-                       get { return currentTaskSetIndex; }\r
-               }\r
-               \r
-               private bool cancelCalled = false;\r
-               \r
-               public override bool Cancel()\r
-               {\r
-                       cancelCalled = true;\r
-                       if (! packageInstallerDownloaded) {\r
-                               return Downloader.Cancel();\r
-                       } else return true;\r
-               }\r
-       }\r
-}\r