public VsixManifestInstaller(
            Action <string> logger,
            RegistryKey registryKey,
            string vsInstallDirectory,
            VsixManifest vsixManifest)
        {
            _logger       = logger;
            _vsixManifest = vsixManifest;

            _installDirectory = Path.Combine(
                vsInstallDirectory,
                "Extensions",
                VersionNumber.CompanyName,
                VersionNumber.ProductName,
                VersionNumber.FileVersion);

            _installDirectoryInfo = new DirectoryInfo(_installDirectory);
            _installPath          = Path.Combine(_installDirectory, "extension.vsixmanifest");

            var pathToDevEnv = Path.Combine(vsInstallDirectory, "devenv.exe");

            if (!File.Exists(pathToDevEnv))
            {
                return;
            }

            _vsExePath       = pathToDevEnv;
            _vsSetupArgument = registryKey?.GetValue("SetupCommandLine") as string ?? "/setup";
        }
예제 #2
0
        public VisualizerInstaller(
            Action <string> logger,
            VsixManifest vsixManifest,
            RegistryKey registryKey,
            string vsInstallDirectory,
            VisualizerAssembly visualizerAssembly)
        {
            _logger = logger;

            _vsixManifestInstaller = new VsixManifestInstaller(
                logger,
                registryKey,
                vsInstallDirectory,
                vsixManifest);

            _visualizerAssembly = visualizerAssembly;
            VsId = _visualizerAssembly.VsYear.ToString();

            var indexOfIde    = vsInstallDirectory.IndexOf("IDE", OrdinalIgnoreCase);
            var pathToCommon7 = vsInstallDirectory.Substring(0, indexOfIde);

            _visualizersDirectory = Path.Combine(pathToCommon7, "Packages", "Debugger", "Visualizers");
        }
        public VisualizerInstallerFactory(Action <string> logger, VsixManifest vsixManifest)
        {
            _logger       = logger;
            _vsixManifest = vsixManifest;
            const string REGISTRY_KEY = @"SOFTWARE\Microsoft";

            _msMachineKey = Registry.LocalMachine.OpenSubKey(REGISTRY_KEY);

            if (_msMachineKey == null)
            {
                ErrorMessage   = $"Unable to open the '{REGISTRY_KEY}' registry key";
                NoVisualStudio = true;
                return;
            }

            var vsKeyNames = _msMachineKey
                             .GetSubKeyNames()
                             .Where(sk => sk.StartsWith("VisualStudio", Ordinal))
                             .ToArray();

            if (vsKeyNames.Length == 0)
            {
                ErrorMessage   = $@"Unable to find any '{REGISTRY_KEY}\VisualStudio' registry keys from which to determine your Visual Studio install paths";
                NoVisualStudio = true;
                return;
            }

            _vsPre2017MachineKey = _msMachineKey.OpenSubKey("VisualStudio");
            _vsPre2017KeyNames   = _vsPre2017MachineKey?.GetSubKeyNames() ?? new string[0];

            _vsPost2015Data = vsKeyNames
                              .Where(kn => kn.StartsWith("VisualStudio_", OrdinalIgnoreCase))
                              .Select(kn => new VsPost2015Data(_msMachineKey.OpenSubKey(kn)))
                              .GroupBy(d => d.InstallDirectory)
                              .Select(grp => grp.First())
                              .ToArray();
        }