using System;\r
+using System.Collections.Generic;\r
using NaGet.Packages.Install;\r
using NaGet.Packages;\r
using NaGet.Net;\r
get {\r
if (downloader == null) {\r
downloader = new Downloader();\r
+ downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
+ if (e.Type == DownloadEventType.DOWNLOADING && e.TaskProgressPercent > 0) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.PING, string.Empty, GetProgressPercent(NaGetTaskSetEventType.PING, e.TaskProgressPercent));\r
+ }\r
+ };\r
}\r
return downloader;\r
}\r
\r
private void initializeMainTaskSetNames()\r
{\r
- System.Collections.Generic.List<string> taskSetNames = new System.Collections.Generic.List<string>();\r
+ List<string> 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
+ taskSetNames.Add("ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81®æ¤\9c証");\r
for (int i =0; i < Installations.Length; i++) {\r
taskSetNames.Add(string.Format("インストール: {0}", Installations[i].ToString()));\r
}\r
\r
{\r
// ハッシュ非適合なインストーラの表\r
- System.Collections.Generic.List<Installation> invalidInstallers = null;\r
+ List<Installation> invalidInstallers = null;\r
\r
- while (invalidInstallers == null || invalidInstallers.Count > 0) {\r
+ do {\r
currentTaskSetIndex = 0;\r
packageInstallerDownloaded = false;\r
\r
\r
packageInstallerDownloaded = true;\r
\r
- // ハッシュの壊れているインストーラを取得\r
+ \r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ \r
+ // ハッシュの壊れているインストーラーを取得\r
invalidInstallers = runCheckHashForInstaller();\r
\r
// ハッシュが壊れているときの対策\r
if (invalidInstallers.Count > 0) {\r
- string msg = string.Format("{0}個のパッケージでファイルが壊れている可能性があります\n強制的にインストールを続行しますか?",\r
- invalidInstallers.Count);\r
- NaGetTaskQueryResult result = RaiseTaskSetQueryEvent(msg, NaGetTaskQueryResult.CONTINUE\r
- | NaGetTaskQueryResult.RETRY\r
- | NaGetTaskQueryResult.CANCEL);\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
return;\r
}\r
}\r
- currentTaskSetIndex ++;\r
- }\r
+ \r
+ // もしハッシュが不適合なソフトがあるならばダウンロード処理からやり直す\r
+ } while (invalidInstallers == null || invalidInstallers.Count > 0);\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ currentTaskSetIndex ++;\r
}\r
\r
foreach (Installation inst in Installations) {\r
inst.OutputDataReceived += this.ReceivedOutputData;\r
int exitCode = inst.Install();\r
if (exitCode != 0) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\8cæ£å¸¸ã\81«çµ\82ã\81\88ã\81¦ã\81\84ã\81ªã\81\84å\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©の終了コード:"+exitCode);\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\8cæ£å¸¸ã\81«çµ\82ã\81\88ã\81¦ã\81\84ã\81ªã\81\84å\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\83\97ã\83ã\82»ã\82¹の終了コード:"+exitCode);\r
}\r
\r
pkgListMan.WriteInstallationLog(inst);\r
done = true;\r
return;\r
}\r
- currentTaskSetIndex ++;\r
- \r
RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, installTaskMsg);\r
+ currentTaskSetIndex ++;\r
\r
if (cancelCalled) {\r
RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
return;\r
}\r
}\r
- pkgListMan.SaveSystemInstalledLogList(); // ログのコミット\r
\r
runLocalUpdate();\r
\r
/// </summary>\r
private void runDownloadAndVirusCheckInstallers()\r
{\r
- using (DownloadScanner scanner = new DownloadScanner()) {\r
- scanner.Init();\r
- foreach (Installation inst in Installations) {\r
- if (! inst.IsInstallablePackage()) {\r
- string msg = string.Format("{0}はインストールすることができません", inst.ToString());\r
- \r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, msg);\r
- done = true;\r
- return;\r
- }\r
- \r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
- \r
- if (! inst.Downloaded) {\r
- try {\r
- inst.Download(Downloader);\r
- } catch (NaGetTaskCanceledException) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "インストーラのダウンロード処理がキャンセルされました");\r
+ using (DownloadScanner scanner = new DownloadScanner()) {\r
+ scanner.Init();\r
+ foreach (Installation inst in Installations) {\r
+ if (! inst.IsInstallablePackage()) {\r
+ string msg = string.Format("{0}はインストールすることができません", inst.ToString());\r
+ \r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, msg);\r
done = true;\r
return;\r
- } catch (System.Net.WebException e) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Message);\r
- if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続されていません。");\r
- } else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
+ }\r
+ \r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ \r
+ if (! inst.Downloaded) {\r
+ try {\r
+ inst.Download(Downloader);\r
+ } catch (NaGetTaskCanceledException) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");\r
+ done = true;\r
+ return;\r
+ } catch (System.Net.WebException e) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Message);\r
+ if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続されていません。");\r
+ } else {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
+ }\r
+ done = true;\r
+ return;\r
+ } catch (Exception e) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
+ done = true;\r
+ return;\r
}\r
- done = true;\r
- return;\r
- } catch (Exception e) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
+ }\r
+ \r
+ if (! inst.Downloaded) { // インストールが完了せずに終わった=失敗=エラー\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));\r
done = true;\r
return;\r
}\r
- }\r
- currentTaskSetIndex ++;\r
- \r
- if (inst.Downloaded) { // 正常終了\r
RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
- } else { // インストールが完了せずに終わった=失敗=エラー\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}のインストーラを正常にダウンロードできませんでした", inst.ToString()));\r
- done = true;\r
- return;\r
- }\r
- \r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
- if (scanner.HasScanner) {\r
- try {\r
- inst.ScanInstallerFile(scanner);\r
- } catch (System.Runtime.InteropServices.COMException ex) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.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
+ currentTaskSetIndex ++;\r
+ \r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ if (! NaGet.Env.EnableScanInstallerFile) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ウイルススキャンを行わない設定のため、ダウンロードしたファイルはウイルススキャンされませんでした");\r
+ } else if (!scanner.HasScanner) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
+ } else {\r
+ try {\r
+ DownloadScannerResult result = inst.ScanInstallerFile(scanner);\r
+ \r
+ switch (result) {\r
+ case DownloadScannerResult.ScannerNotFound:\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
+ break;\r
+ case DownloadScannerResult.InfectedAndCleaned:\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR,\r
+ "インストーラーファイルからウイルス感染が検出されたため、削除されました。");\r
+ done = true;\r
+ return;\r
+ case DownloadScannerResult.InfectedButNotCleaned:\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.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(NaGetTaskSetEventType.WARNING,\r
- string.Format("{0} (E{1})", ex.InnerException.Message, ((System.Runtime.InteropServices.COMException) ex.InnerException).ErrorCode));\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(NaGetTaskSetEventType.WARNING,\r
+ string.Format("{0} (E{1})", ex.InnerException.Message, ((System.Runtime.InteropServices.COMException) ex.InnerException).ErrorCode));\r
+ }\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "インストーラーファイルがウイルススキャナーによって削除されました。");\r
+ done = true;\r
+ return;\r
}\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "インストーラがウイルススキャナによって削除されました。");\r
+ }\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ currentTaskSetIndex ++;\r
+ \r
+ if (cancelCalled) {\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
done = true;\r
return;\r
}\r
- } else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, string.Format("ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)"));\r
}\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
}\r
}\r
- }\r
\r
/// <summary>\r
/// ダウンロードしたパッケージが整合したか否かハッシュでチェック\r
/// </summary>\r
- /// <returns>整合しなかったインストーラのリスト</returns>\r
- private System.Collections.Generic.List<Installation> runCheckHashForInstaller()\r
+ /// <returns>æ\95´å\90\88ã\81\97ã\81ªã\81\8bã\81£ã\81\9fã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81®ã\83ªã\82¹ã\83\88</returns>\r
+ private List<Installation> runCheckHashForInstaller()\r
{\r
- System.Collections.Generic.List<Installation> invalidInstallers = new System.Collections.Generic.List<Installation>();\r
+ List<Installation> invalidInstallers = new List<Installation>();\r
\r
int i = 0;\r
foreach (Installation inst in Installations) {\r
RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
pkgListMan.DetectInstalledPkgs();\r
pkgListMan.SaveInstalledPackageList();\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
\r
// システムにインストールされているリストの更新\r
RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
pkgListMan.DetectSystemInstalledPkgs();\r
pkgListMan.SaveSystemInstalledPackageList();\r
+ RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
}\r
\r
public override bool Done {\r