}\r
\r
/// <summary>\r
+ /// バージョン取得手段の種類を返す。\r
+ /// </summary>\r
+ public enum VersionInfoKey\r
+ {\r
+ /// <summary>\r
+ /// レジストリ情報を優先\r
+ /// </summary>\r
+ [XmlEnum(Name="registry")]\r
+ REGISTRY,\r
+ }\r
+ \r
+ /// <summary>\r
/// パッケージ情報を格納するクラス\r
/// </summary>\r
public class Package\r
public string UninstallerKey;\r
\r
/// <summary>\r
+ /// バージョン取得のルール\r
+ /// </summary>\r
+ public VersionInfoKey? VersionInfoKey;\r
+ \r
+ /// <summary>\r
/// サイレントインストールのための引数。\r
/// インストーラー形式のみ有効で、nullもしくは空文字列の場合は\r
/// サイレントインストールができないことをあらわす\r
int count = installedPkgList.FindAll(PackageList<InstalledPackage>.GetPredicateForPackageName(pkg.Name)).Count;\r
\r
foreach (InstallationLog log in systemInstalledLogList.FindAll(createPackageNamePredicator(pkg))) {\r
- // 1. バージョンがアンインストール情報から取得できなかったときは無条件で登録\r
+ // 1. バージョンがアンインストール情報から取得できなかったときは無条件で登録。\r
// 2. 同一名パッケージがない場合は無条件で登録\r
// 3. 複数個同一パッケージがインストールされている場合は、バージョン比較して登録。\r
if (string.IsNullOrEmpty(pkg.Version) ||\r
count < 2 ||\r
log.Package.Version == pkg.Version) {\r
- \r
// 補完したパッケージ情報への差し替え\r
+ \r
UninstallInformation pkgUninstInfo = pkg.UninstallInfo;\r
+ string pkgVersion = pkg.Version;\r
+ VersionInfoKey? pkgVersionInfoKey = pkg.VersionInfoKey;\r
+ \r
NaGet.Utils.FieldCopy<Package,InstalledPackage>(log.Package, ref pkg);\r
+ \r
+ \r
pkg.UninstallInfo = pkgUninstInfo;\r
if (pkg.UninstallInfo.InstallDate == null) { // インストール日時の補完\r
pkg.UninstallInfo.InstallDate = log.Date;\r
}\r
+ if (pkgVersionInfoKey.HasValue && pkgVersionInfoKey.Value == VersionInfoKey.REGISTRY) { // レジストリのバージョンを信頼する場合、バージョン情報の補完\r
+ if (! string.IsNullOrEmpty(pkgVersion)) {\r
+ pkg.Version = pkgVersion;\r
+ }\r
+ }\r
\r
break;\r
}\r