+ \r
+ // 権限を親フォルダーに落とす\r
+ try {\r
+ string targetDir = Path.GetDirectoryName(installerFile);\r
+ NaGet.Utils.SetAccessControlRecursive(targetDir, File.GetAccessControl(Path.GetDirectoryName(targetDir)));\r
+ } catch (Exception) {} // 失敗時は何もしない\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// インストーラーファイルをスキャンする\r
+ /// </summary>\r
+ /// <remarks>ウイルスのため退避・削除されたときも例外を投げずにあたかも正常かのように動作しえます。</remarks>\r
+ /// <exception cref="ComException">スキャンで意図せぬ動作があったとき</exception>\r
+ /// <param name="scanner">スキャナーオブジェクト</param>\r
+ /// <returns>スキャン結果</returns>\r
+ public DownloadScannerResult ScanInstallerFile(DownloadScanner scanner)\r
+ {\r
+ DownloadScannerResult result;\r
+ Exception e = null;\r
+ try {\r
+ result = scanner.Scan(installerFile, InstalledPackage.Installer[installerIndex].Url.Href);\r
+ } catch (Exception ex) {\r
+ result = DownloadScannerResult.ScannerNotFound;\r
+ e = ex;\r
+ }\r
+ \r
+ if ( e != null ) {\r
+ // ファイルが消されていないが例外が発生していたときは、その例外を投げる\r
+ throw e;\r
+ } else {\r
+ return result;\r