コード例 #1
0
        private IEnumerable <string> GetApplicationsFiles(RootRegistryKey rootKey, string baseKeyName)
        {
            var applications = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);

            using var applicationsKeys = _registryService.GetRegistryKey(rootKey).OpenSubKey(baseKeyName);
            foreach (var appExecuteFile in applicationsKeys.GetSubKeyNames())
            {
                applications.Add(appExecuteFile);
            }

            return(applications.ToImmutableHashSet());
        }
コード例 #2
0
        public IRegistryKey GetRegistryKey(RootRegistryKey rootRegistryKey)
        {
            var winRegistryKey = rootRegistryKey switch
            {
                RootRegistryKey.CurrentUser => Registry.CurrentUser,
                RootRegistryKey.ClassesRoot => Registry.ClassesRoot,
                RootRegistryKey.LocalMachine => Registry.LocalMachine,
                _ => throw new ArgumentOutOfRangeException(nameof(rootRegistryKey), rootRegistryKey, null)
            };

            return(new RegistryKey(winRegistryKey));
        }
    }
コード例 #3
0
        private IEnumerable <string> GetOpenWithList(string fileExtension, RootRegistryKey rootKey,
                                                     string baseKeyName = "")
        {
            var results = new List <string>();

            baseKeyName = @$ "{baseKeyName?.TrimEnd('\\')}\{fileExtension}\OpenWithList";
コード例 #4
0
        public async Task TestGetInstalledApplicationsAsyncClassesRoot(bool is64BitProcess,
                                                                       string registryKey, int resultsCount, RootRegistryKey key)
        {
            var subKeyMock = new Mock <IRegistryKey>();

            subKeyMock
            .Setup(m => m.GetSubKeyNames())
            .Returns(new[] { AppName });

            var emptySubKeyMock = new Mock <IRegistryKey>();

            emptySubKeyMock
            .Setup(m => m.GetSubKeyNames())
            .Returns(new string[0]);
            var emptyKeyMock = new Mock <IRegistryKey>();

            emptyKeyMock
            .Setup(m =>
                   m.OpenSubKey(It.IsAny <string>()))
            .Returns(new Mock <IRegistryKey>().Object);

            var registryKeyMock = new Mock <IRegistryKey>();

            registryKeyMock
            .Setup(m =>
                   m.OpenSubKey(It.IsAny <string>()))
            .Returns(emptySubKeyMock.Object);
            registryKeyMock
            .Setup(m =>
                   m.OpenSubKey(registryKey))
            .Returns(subKeyMock.Object);

            _autoMocker
            .Setup <IRegistryService, IRegistryKey>(m => m.GetRegistryKey(It.IsAny <RootRegistryKey>()))
            .Returns(emptyKeyMock.Object);
            _autoMocker
            .Setup <IRegistryService, IRegistryKey>(m => m.GetRegistryKey(key))
            .Returns(registryKeyMock.Object);
            _autoMocker
            .Setup <IApplicationInfoProvider, (string Name, string StartCommand, string ExecutePath)>(m => m.GetInfo(AppName))
            .Returns((AppName, AppCommand, ExecutePath));
            _autoMocker
            .Setup <IRegexService, IList <Match> >(m => m.GetMatches(It.IsAny <string>(), "%.", RegexOptions.Compiled))
            .Returns(new Match[0]);
            _autoMocker
            .Setup <IEnvironmentService, bool>(m => m.Is64BitProcess)
            .Returns(is64BitProcess);

            var service = _autoMocker.CreateInstance <WindowsApplicationService>();

            var apps = await service.GetInstalledApplicationsAsync();

            Assert.NotNull(apps);

            var appsArray = apps.ToArray();

            Assert.Equal(resultsCount, appsArray.Length);

            if (resultsCount == 1)
            {
                var app = appsArray.Single();
                Assert.Equal(AppName, app.DisplayName);
                Assert.Equal(AppCommand, app.Arguments);
                Assert.Equal(ExecutePath, app.ExecutePath);
            }
        }