Ejemplo n.º 1
0
        public static UninstallResult UninstallAssembly(AssemblyName assemblyName, InstallReference reference)
        {
            if (assemblyName == null)
            {
                throw new ArgumentNullException(nameof(assemblyName));
            }
            if (!assemblyName.IsFullyQualified())
            {
                throw new ArgumentOutOfRangeException(nameof(assemblyName), assemblyName,
                                                      "Must be a fully qualified assembly name");
            }

            FusionInstallReference fusionReference = null;

            if (reference != null)
            {
                if (!reference.CanBeUsed())
                {
                    throw new ArgumentException("InstallReferenceType can not be used", nameof(reference));
                }

                fusionReference =
                    new FusionInstallReference(reference.Type, reference.Identifier, reference.Description);
            }

            var assemblyCache = GetAssemblyCache();

            ComCheck(assemblyCache.UninstallAssembly(0, assemblyName.GetFullyQualifiedName(), fusionReference,
                                                     out var disposition));

            return((UninstallResult)disposition);
        }
Ejemplo n.º 2
0
        public static IEnumerable <InstallReference> GetInstallReferences(AssemblyName assemblyName)
        {
            IAssemblyName fusionAssemblyName = null;

            ComCheck(FusionApi.CreateAssemblyNameObject(out fusionAssemblyName, assemblyName.GetFullyQualifiedName(), CreateAssemblyNameObjectFlags.ParseDisplayName, IntPtr.Zero));

            IInstallReferenceEnum installReferenceEnum = null;

            ComCheck(FusionApi.CreateInstallReferenceEnum(out installReferenceEnum, fusionAssemblyName, 0, IntPtr.Zero));

            IInstallReferenceItem item = null;

            do
            {
                int hResult = installReferenceEnum.GetNextInstallReferenceItem(out item, 0, IntPtr.Zero);
                if ((uint)hResult == 0x80070103)  // ERROR_NO_MORE_ITEMS
                {
                    yield break;
                }
                ComCheck(hResult);

                IntPtr refData;
                ComCheck(item.GetReference(out refData, 0, IntPtr.Zero));

                FusionInstallReference fusionReference = new FusionInstallReference();
                Marshal.PtrToStructure(refData, fusionReference);

                var reference = new InstallReference(InstallReferenceGuid.ToType(fusionReference.GuidScheme), fusionReference.Identifier,
                                                     fusionReference.NonCanonicalData);

                yield return(reference);
            } while (true);
        }
Ejemplo n.º 3
0
        public static string GetAssemblyPath(AssemblyName assemblyName)
        {
            if (assemblyName == null)
            {
                throw new ArgumentNullException(nameof(assemblyName));
            }
            if (!assemblyName.IsFullyQualified())
            {
                throw new ArgumentOutOfRangeException(nameof(assemblyName), assemblyName,
                                                      "Must be a fully qualified assembly name");
            }

            var assemblyCache = GetAssemblyCache();

            var info = new AssemblyInfo {
                cbAssemblyInfo = Marshal.SizeOf(typeof(AssemblyInfo)), cchBuf = 1024
            };

            info.currentAssemblyPath = new string('\0', info.cchBuf);

            var hResult = assemblyCache.QueryAssemblyInfo(QueryAssemblyInfoFlags.Default,
                                                          assemblyName.GetFullyQualifiedName(), ref info);

            if ((uint)hResult == 0x8007007A)  // ERROR_INSUFFICIENT_BUFFER
            {
                info.currentAssemblyPath = new string('\0', info.cchBuf);
                ComCheck(assemblyCache.QueryAssemblyInfo(QueryAssemblyInfoFlags.Default,
                                                         assemblyName.GetFullyQualifiedName(), ref info));
            }
            else
            {
                ComCheck(hResult);
            }

            return(info.currentAssemblyPath);
        }
Ejemplo n.º 4
0
 public static string GetFullyQualifiedAssemblyName(AssemblyName assemblyName)
 {
     return(assemblyName.GetFullyQualifiedName());
 }