private void GetMsiInstalledPackage(string name, PackageJson package, string requiredVersion, string minimumVersion, string maximumVersion, PackageSourceListRequest request) { request.Debug(Resources.Messages.DebugInfoCallMethod, PackageProviderName, string.Format(CultureInfo.InvariantCulture, "GetMsiInstalledPackage' - name='{0}', requiredVersion='{1}',minimumVersion='{2}', maximumVersion='{3}'", name, requiredVersion, minimumVersion, maximumVersion)); var provider = PackageSourceListRequest.FindProvider(request, package.Type, request); if (provider != null) { var packagesInstalled = provider.GetInstalledPackages(package.Name, requiredVersion, minimumVersion, maximumVersion, request); if (!packagesInstalled.Any()) { packagesInstalled = provider.GetInstalledPackages(package.DisplayName, requiredVersion, minimumVersion, maximumVersion, request); } foreach (var i in packagesInstalled) { request.Debug("found a package '{0}.{1}' installed from '{2}'", i.Name, i.Version, i.Source); var info = PackageSourceListRequest.MakeFastPathComplex(i.Source, name, (package.DisplayName ?? ""), i.Version, i.FastPackageReference); _fastPackReftable.AddOrSet(i.FastPackageReference, i); // check if the installed version matches with the one specified in the PSL.json. // If so, we choose PSL.json. var version = i.Version.CompareVersion(package.Version) ? package.Version : i.Version; //we use displayname here because msi provider uses the displayname. request.YieldSoftwareIdentity(info, package.DisplayName, version, i.VersionScheme, i.Summary, package.Source, i.SearchKey, i.FullPath, i.PackageFilename); return; } } }
internal static void GetInstalledZipPackage(PackageJson package, PackageSourceListRequest request) { try { if (request.AddToPath.Value) { request.Verbose(Resources.Messages.AddOrRemovePath, Constants.ProviderName, "AddToPath", "Install-Package"); } if (request.RemoveFromPath.Value) { request.Verbose(Resources.Messages.AddOrRemovePath, Constants.ProviderName, "RemoveFromPath", "Uninstall-Package"); } string path = Path.Combine(package.Destination, package.Name, package.Version); if (Directory.Exists(path)) { if (Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).Any()) { string userSpecifiedProvider = request.GetOptionValue("ProviderName") ?? request.GetOptionValue("Provider"); var fp = PackageSourceListRequest.MakeFastPathComplex(package.Source, package.Name, (package.DisplayName ?? ""), package.Version, path, userSpecifiedProvider ?? ""); //the directory exists and contain files, we think the package has been installed. request.YieldSoftwareIdentity(fp, package.Name, package.Version, package.VersionScheme, package.Summary, path, package.Name, path, path); } } } catch (Exception e) { request.Debug(e.StackTrace); } }
internal static void GetInstalledZipPackage(PackageJson package, PackageSourceListRequest request) { string path = Path.Combine(package.Destination, package.Name, package.Version); if (Directory.Exists(path)) { if (Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).Any()) { var fp = PackageSourceListRequest.MakeFastPathComplex(package.Source, package.Name, (package.DisplayName ?? ""), package.Version, path); //the directory exists and contain files, we think the package has been installed. request.YieldSoftwareIdentity(fp, package.Name, package.Version, package.VersionScheme, package.Summary, path, package.Name, path, path); } } }
internal static void GetInstalledPowershellArtifacts(PackageJson package, string requiredVersion, string minimumVersion, string maximumVersion, Dictionary <string, SoftwareIdentity> fastPackReftable, PackageSourceListRequest request) { if (request == null) { throw new ArgumentNullException("request"); } request.Debug(Resources.Messages.DebugInfoCallMethod, Constants.ProviderName, string.Format(CultureInfo.InvariantCulture, "GetInstalledPowershellArtifacts' - name='{0}', requiredVersion='{1}',minimumVersion='{2}', maximumVersion='{3}'", package.Name, requiredVersion, minimumVersion, maximumVersion)); var provider = PackageSourceListRequest.FindProvider(request, package.Type, request); if (provider == null) { return; } //calling the PowerShellGet provider request.Debug("Calling '{0}' provider to get installed packages '{1}.{2}'", provider.Name, package.Name, package.Version); var packagesInstalled = provider.GetInstalledPackages(package.Name, requiredVersion, minimumVersion, maximumVersion, request).ToArray(); if (packagesInstalled == null || !packagesInstalled.Any()) { request.Verbose(Resources.Messages.NumberOfPackagesRecevied, 0, provider.Name, "GetInstalledPackages"); return; } //Make sure the packages found are defined in the psl.json foreach (var i in packagesInstalled.Where(each => new SemanticVersion(each.Version) == new SemanticVersion(package.Version))) { request.Debug("Found an installed package '{0}.{1} from {2}' ", i.Name, i.Version, i.Source); string userSpecifiedProvider = request.GetOptionValue("ProviderName") ?? request.GetOptionValue("Provider"); var info = PackageSourceListRequest.MakeFastPathComplex(i.Source, i.Name, "", i.Version, "", userSpecifiedProvider ?? ""); fastPackReftable.AddOrSet(info, i); // check if the installed version matches with the one specified in the PSL.json. // If so, we choose PSL.json. var version = i.Version.CompareVersion(package.Version) ? package.Version : i.Version; request.YieldSoftwareIdentity(info, i.Name, version, i.VersionScheme, i.Summary, i.Source, i.SearchKey, i.FullPath, i.PackageFilename); } }
internal static void GeInstalledNuGetPackages(PackageJson package, string requiredVersion, string minimumVersion, string maximumVersion, Dictionary <string, SoftwareIdentity> fastPackReftable, PackageSourceListRequest request) { if (request == null) { throw new ArgumentNullException("request"); } request.Debug(Resources.Messages.DebugInfoCallMethod, Constants.ProviderName, string.Format(CultureInfo.InvariantCulture, "GeInstalledNuGetPackages' - name='{0}', requiredVersion='{1}',minimumVersion='{2}', maximumVersion='{3}'", package.Name, requiredVersion, minimumVersion, maximumVersion)); //clone the request //nuget provider may not know the location of the package gets installed. //we need to pass around the destination path to nuget provider var installedRequest = PackageSourceListRequest.ExtendRequest( new Dictionary <string, string[]> { { "Destination", new[] { package.Destination } } }, null, request); var provider = PackageSourceListRequest.FindProvider(request, package.Type, request); if (provider != null) { //calling NuGet provider var packagesInstalled = provider.GetInstalledPackages(package.Name, requiredVersion, minimumVersion, maximumVersion, installedRequest); if (packagesInstalled != null) { //Make sure the packages found are defined in the psl.json foreach (var i in packagesInstalled.Where(each => new SemanticVersion(each.Version) == new SemanticVersion(package.Version))) { request.Debug("Found an installed package '{0}.{1} from {2}' ", i.Name, i.Version, i.Source); string userSpecifiedProvider = request.GetOptionValue("ProviderName") ?? request.GetOptionValue("Provider"); var info = PackageSourceListRequest.MakeFastPathComplex(i.Source, i.Name, "", i.Version, "", userSpecifiedProvider ?? ""); fastPackReftable.AddOrSet(info, i); // make it semver because in find-package we use semver var version = i.Version.CompareVersion(package.Version) ? package.Version : i.Version; request.YieldSoftwareIdentity(info, i.Name, version, i.VersionScheme, i.Summary, i.Source, i.SearchKey, i.FullPath, i.PackageFilename); } } } }
private static bool YieldPackages(string hive, RegistryKey regkey, string name, string displayname, string requiredVersion, string minimumVersion, string maximumVersion, PackageJson package, Request request) { if (regkey != null) { var includeSystemComponent = request.GetOptionValue("IncludeSystemComponent").IsTrue(); foreach (var key in regkey.GetSubKeyNames()) { var subkey = regkey.OpenSubKey(key); if (subkey != null) { var properties = subkey.GetValueNames().ToDictionaryNicely(each => each.ToString(), each => (subkey.GetValue(each) ?? string.Empty).ToString(), StringComparer.OrdinalIgnoreCase); //if (!includeWindowsInstaller && properties.ContainsKey("WindowsInstaller") && properties["WindowsInstaller"] == "1") //{ // continue; //} if (!includeSystemComponent && properties.ContainsKey("SystemComponent") && properties["SystemComponent"] == "1") { continue; } var productName = ""; if (!properties.TryGetValue("DisplayName", out productName)) { // no product name? continue; } if (IsMatch(name, productName) || IsMatch(displayname, productName)) { var productVersion = properties.Get("DisplayVersion") ?? ""; var publisher = properties.Get("Publisher") ?? ""; var uninstallString = properties.Get("QuietUninstallString") ?? properties.Get("UninstallString") ?? ""; var comments = properties.Get("Comments") ?? ""; var fp = hive + @"\" + subkey; // make sure we only return the packages that are defined in the psl.json if (new SemanticVersion(package.Version) != new SemanticVersion(productVersion)) { continue; } if (!string.IsNullOrEmpty(requiredVersion)) { if (new SemanticVersion(requiredVersion) != new SemanticVersion(productVersion)) { continue; } } else { if (!string.IsNullOrEmpty(minimumVersion) && new SemanticVersion(minimumVersion) > new SemanticVersion(productVersion)) { continue; } if (!string.IsNullOrEmpty(maximumVersion) && new SemanticVersion(maximumVersion) < new SemanticVersion(productVersion)) { continue; } } string userSpecifiedProvider = request.GetOptionValue("ProviderName") ?? request.GetOptionValue("Provider"); fp = PackageSourceListRequest.MakeFastPathComplex(package.Destination ?? "", package.Name, package.DisplayName, productVersion, fp, userSpecifiedProvider ?? ""); var source = properties.Get("InstallLocation") ?? ""; //we use name here because find-package uses name (not displayname) in the PSL.json, if (request.YieldSoftwareIdentity(fp, name, productVersion, "unknown", comments, source, name, "", "") != null) { if (properties.Keys.Where(each => !string.IsNullOrWhiteSpace(each)).Any(k => request.AddMetadata(fp, k.MakeSafeFileName(), properties[k]) == null)) { return(false); } } } } } } return(true); }