Exemplo n.º 1
0
        public AssemblyCacheInstallReferenceEnum(String assemblyName, GACVersion gacVersion = GACVersion.Net40)
        {
            IAssemblyName fusionName = null;
            int hr = 0;
            switch (gacVersion) {
                case GACVersion.Net40:
                    hr = Utils.CreateAssemblyNameObject40(
                        out fusionName,
                        assemblyName,
                        CreateAssemblyNameObjectFlags.CANOF_PARSE_DISPLAY_NAME,
                        IntPtr.Zero);

                    break;
                case GACVersion.Net20:
                    hr = Utils.CreateAssemblyNameObject20(
                        out fusionName,
                        assemblyName,
                        CreateAssemblyNameObjectFlags.CANOF_PARSE_DISPLAY_NAME,
                        IntPtr.Zero);

                    break;
            }

            if (hr >= 0) {
                switch (gacVersion) {
                    case GACVersion.Net40:
                        hr = Utils.CreateInstallReferenceEnum40(out refEnum, fusionName, 0, IntPtr.Zero);
                        break;
                    case GACVersion.Net20:
                        hr = Utils.CreateInstallReferenceEnum20(out refEnum, fusionName, 0, IntPtr.Zero);
                        break;
                }
            }

            if (hr < 0) {
                Marshal.ThrowExceptionForHR(hr);
            }
        }
Exemplo n.º 2
0
        // See comments in UninstallAssembly
        public static String QueryAssemblyInfo(String assemblyName, GACVersion gacVersion = GACVersion.Net40)
        {
            if (assemblyName == null) {
                throw new ArgumentException("Invalid name", "assemblyName");
            }

            var aInfo = new AssemblyInfo();

            aInfo.cchBuf = 1024;
            // Get a string with the desired length
            aInfo.currentAssemblyPath = new String('\0', aInfo.cchBuf);

            IAssemblyCache ac = null;
            int hr = 0;
            switch (gacVersion) {
                case GACVersion.Net40:
                    hr = Utils.CreateAssemblyCache40(out ac, 0);
                    break;
                case GACVersion.Net20:
                    hr = Utils.CreateAssemblyCache20(out ac, 0);
                    break;
            }

            if (hr >= 0) {
                hr = ac.QueryAssemblyInfo(0, assemblyName, ref aInfo);
            }
            if (hr < 0) {
                Marshal.ThrowExceptionForHR(hr);
            }

            return aInfo.currentAssemblyPath;
        }
Exemplo n.º 3
0
        // assemblyName has to be fully specified name.
        // A.k.a, for v1.0/v1.1 assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx".
        // For v2.0 assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx, ProcessorArchitecture=xx".
        // If assemblyName is not fully specified, a random matching assembly will be uninstalled.
        public static void UninstallAssembly(String assemblyName, InstallReference reference, out AssemblyCacheUninstallDisposition disp, GACVersion gacVersion = GACVersion.Net40)
        {
            var dispResult = AssemblyCacheUninstallDisposition.Uninstalled;
            if (reference != null) {
                if (!InstallReferenceGuid.IsValidGuidScheme(reference.GuidScheme)) {
                    throw new ArgumentException("Invalid reference guid.", "guid");
                }
            }

            IAssemblyCache ac = null;
            int hr = 0;

            switch (gacVersion) {
                case GACVersion.Net40:
                    hr = Utils.CreateAssemblyCache40(out ac, 0);
                    break;
                case GACVersion.Net20:
                    hr = Utils.CreateAssemblyCache20(out ac, 0);
                    break;
            }

            if (hr >= 0) {
                hr = ac.UninstallAssembly(0, assemblyName, reference, out dispResult);
            }

            if (hr < 0) {
                Marshal.ThrowExceptionForHR(hr);
            }

            disp = dispResult;
        }
Exemplo n.º 4
0
        public static void InstallAssembly(String assemblyPath, InstallReference reference, AssemblyCommitFlags flags, GACVersion gacVersion = GACVersion.Net40)
        {
            if (reference != null) {
                if (!InstallReferenceGuid.IsValidGuidScheme(reference.GuidScheme)) {
                    throw new ArgumentException("Invalid reference guid.", "guid");
                }
            }

            IAssemblyCache ac = null;

            int hr = 0;

            switch (gacVersion) {
                case GACVersion.Net40:
                    hr = Utils.CreateAssemblyCache40(out ac, 0);
                    break;
                case GACVersion.Net20:
                    hr = Utils.CreateAssemblyCache20(out ac, 0);
                    break;
            }
            // hr = Utils.CreateAssemblyCache(out ac, 0);
            if (hr >= 0) {
                hr = ac.InstallAssembly((int)flags, assemblyPath, reference);
            }

            if (hr < 0) {
                Marshal.ThrowExceptionForHR(hr);
            }
        }