コード例 #1
0
        public Vs2017Config()
        {
            try
            {
                _setupConfig = new SetupConfiguration();
            }
            catch (Exception ex)
            {
                throw new COMException("Failed to get query VS2017 instances", ex);
            }

            var setupConfig2 = (ISetupConfiguration2)_setupConfig;
            var e            = setupConfig2.EnumAllInstances();
            var helper       = (ISetupHelper)_setupConfig;

            int fetched;
            var instances = new ISetupInstance[1];

            do
            {
                e.Next(1, instances, out fetched);
                if (fetched > 0)
                {
                    var instance2    = (ISetupInstance2)instances[0];
                    var ipath        = instance2.GetInstallationPath();
                    var ppath        = instance2.GetProductPath();
                    var combinedPath = Path.Combine(ipath, ppath);
                    _paths.Add(combinedPath);
                }
            }while (fetched > 0);
        }
コード例 #2
0
        public void Setup(ISetupConfiguration configuration)
        {
            this.setupConfiguration = configuration ?? throw new ArgumentNullException(nameof(configuration));

            var list = new List <IFilter>(configuration.Filters);

            list.Add(new RequestForwarder(this.setupConfiguration));

            this.routerSteps = FiltersPipelineFactory.Create(list, this.logger);
        }
コード例 #3
0
 public static void GetSetupConfiguration(out ISetupConfiguration setupConfiguration, IntPtr reserved)
 {
     if (Environment.Is64BitProcess)
     {
         GetSetupConfiguration_x64(out setupConfiguration, reserved);
     }
     else
     {
         GetSetupConfiguration_x86(out setupConfiguration, reserved);
     }
 }
コード例 #4
0
        private string GetExeToolPathFromSetupConfiguration(ILogger logger)
        {
            string toolPath = null;

            logger.LogDebug(Resources.CONV_DIAG_LocatingCodeCoverageToolSetupConfiguration);
            ISetupConfiguration configurationQuery = setupConfigurationFactory.GetSetupConfigurationQuery();

            if (configurationQuery != null)
            {
                IEnumSetupInstances instanceEnumerator = configurationQuery.EnumInstances();

                int fetched;
                ISetupInstance[] tempInstance = new ISetupInstance[1];

                List <ISetupInstance2> instances = new List <ISetupInstance2>();
                //Enumerate the configuration instances
                do
                {
                    instanceEnumerator.Next(1, tempInstance, out fetched);
                    if (fetched > 0)
                    {
                        ISetupInstance2 instance = (ISetupInstance2)tempInstance[0];
                        if (instance.GetPackages().Any(p => p.GetId() == CodeCoverageInstallationPackage))
                        {
                            //Store instances that have code coverage package installed
                            instances.Add((ISetupInstance2)tempInstance[0]);
                        }
                    }
                } while (fetched > 0);

                if (instances.Count > 1)
                {
                    logger.LogDebug(Resources.CONV_DIAG_MultipleVsVersionsInstalled, string.Join(", ", instances.Select(i => i.GetInstallationVersion())));
                }

                //Get the installation path for the latest visual studio found
                var visualStudioPath = instances.OrderByDescending(i => i.GetInstallationVersion())
                                       .Select(i => i.GetInstallationPath())
                                       .FirstOrDefault();

                if (visualStudioPath != null)
                {
                    toolPath = Path.Combine(visualStudioPath, TeamToolPathandExeName);
                }
            }
            else
            {
                logger.LogDebug(Resources.CONV_DIAG_SetupConfigurationNotSupported);
            }

            return(toolPath);
        }
コード例 #5
0
        public Vs2017SetupConfig()
        {
            try
            {
                // Try to CoCreate the class object.
                _setupConfig = new SetupConfiguration();
            }
            catch (COMException ex) when(ex.HResult == REGDB_E_CLASSNOTREG)
            {
                // Try to get the class object using app-local call.
                var result = GetSetupConfiguration(out _setupConfig, IntPtr.Zero);

                if (result < 0)
                {
                    throw new COMException("Failed to get query", result);
                }
            }

            var setupConfig2 = (ISetupConfiguration2)_setupConfig;
            var e            = setupConfig2.EnumAllInstances();
            var helper       = (ISetupHelper)_setupConfig;

            int fetched;
            var instances = new ISetupInstance[1];

            do
            {
                e.Next(1, instances, out fetched);
                if (fetched > 0)
                {
                    var instance2    = (ISetupInstance2)instances[0];
                    var instanceInfo = new VSInstanceInfo
                    {
                        Id            = instance2.GetInstanceId(),
                        Name          = instance2.GetInstallationName(),
                        Version       = instance2.GetInstallationVersion(),
                        DispName      = instance2.GetDisplayName(),
                        Description   = instance2.GetDescription(),
                        ResPath       = instance2.ResolvePath(),
                        EnginePath    = instance2.GetEnginePath(),
                        InstalledPath = instance2.GetInstallationPath(),
                        ProductPath   = instance2.GetProductPath()
                    };
                    _instanceInfos.Add(instanceInfo);
                }
            }while (fetched > 0);
        }
コード例 #6
0
        public Vs2017SetupConfig()
        {
            try
            {
                _setupConfig = new SetupConfiguration();
            }
            catch (Exception ex)
            {
                throw new Exception($"Cannot create a new SetupConfiguration for Visual Studio", ex);
            }

            var setupConfig2 = (ISetupConfiguration2)_setupConfig;
            var e            = setupConfig2.EnumAllInstances();
            var helper       = (ISetupHelper)_setupConfig;

            int fetched;
            var instances = new ISetupInstance[1];

            do
            {
                e.Next(1, instances, out fetched);
                if (fetched > 0)
                {
                    var instance2    = (ISetupInstance2)instances[0];
                    var instanceInfo = new VSInstanceInfo
                    {
                        Id            = instance2.GetInstanceId(),
                        Name          = instance2.GetInstallationName(),
                        Version       = instance2.GetInstallationVersion(),
                        DispName      = instance2.GetDisplayName(),
                        Description   = instance2.GetDescription(),
                        ResPath       = instance2.ResolvePath(),
                        EnginePath    = instance2.GetEnginePath(),
                        InstalledPath = instance2.GetInstallationPath(),
                        ProductPath   = instance2.GetProductPath()
                    };
                    _instanceInfos.Add(instanceInfo);
                }
            }while (fetched > 0);
        }
コード例 #7
0
        public ISetupConfiguration GetSetupConfigurationQuery()
        {
            ISetupConfiguration setupConfiguration = null;

            try
            {
                setupConfiguration = new SetupConfiguration();
            }
            catch (COMException ex) when(ex.HResult == REGDB_E_CLASSNOTREG)
            {
                //Attempt to access the native library
                try
                {
                    return(GetSetupConfiguration(out ISetupConfiguration query, IntPtr.Zero) < 0 ? null : query);
                }
                catch (DllNotFoundException)
                {
                    //Setup configuration is not supported
                    return(null);
                }
            }

            return(setupConfiguration);
        }
コード例 #8
0
 static extern int GetSetupConfiguration([MarshalAs(UnmanagedType.Interface), Out] out ISetupConfiguration configuration, IntPtr reserved);
コード例 #9
0
 public static extern int GetSetupConfiguration_x86(
     [Out, MarshalAs(UnmanagedType.Interface)] out ISetupConfiguration setupConfiguration,
     [In] IntPtr pReserved
     );
コード例 #10
0
 public RequestForwarder(ISetupConfiguration setupConfiguration)
 {
     this.setupConfiguration = setupConfiguration;
 }
コード例 #11
0
ファイル: NativeMethods.cs プロジェクト: lachbaer/roslyn1612
 public static extern void GetSetupConfiguration([MarshalAs(UnmanagedType.Interface)] out ISetupConfiguration setupConfiguration);