private static TestShellRuntimeInfo GetBestMatchRuntimeInfo(IEnumerable <TestShellRuntimeInfo> runtimeInfos) { TestShellRuntimeInfo bestMatchRuntimeInfo = runtimeInfos. OrderBy(r => VersionStringToComparableNumber(r.Version)).FirstOrDefault();//best match return(bestMatchRuntimeInfo); }
private static TestShellRuntimeInfo SelectRuntimeVersionInfo(IEnumerable <TestShellRuntimeInfo> runtimeInfos, string targetRuntimeVersion) { TestShellRuntimeInfo runtimeInfo = GetCurrentlyLoadedRuntimeInfo(runtimeInfos); if (runtimeInfo != null) { if (!IsGreaterOrEqualVersion(runtimeInfo.Version, targetRuntimeVersion)) { throw IncompatibleRuntimeLoaded(targetRuntimeVersion, runtimeInfo.Version); } } else { var matchingRuntimeInfos = GetMatchingRuntimeInfos(runtimeInfos, targetRuntimeVersion); if (!matchingRuntimeInfos.Any()) { throw NoMatchingRuntimeException(targetRuntimeVersion); } var licensedRuntimeInfos = GetLicensedRuntimeInfos(matchingRuntimeInfos); if (!licensedRuntimeInfos.Any()) { throw NoRuntimeLicenseException(targetRuntimeVersion); } runtimeInfo = GetBestMatchRuntimeInfo(licensedRuntimeInfos); } return(runtimeInfo); }
private static bool IsLicenseValid(TestShellRuntimeInfo testShellRuntimeInfo) { string runtimeAssemblyPath = Path.Combine(testShellRuntimeInfo.Path, testShellRuntimeInfo.RuntimeAssemblyName); AppDomainSetup appDomainSetup = new AppDomainSetup(); appDomainSetup.ApplicationBase = testShellRuntimeInfo.Path; AppDomain appDomain = AppDomain.CreateDomain("LicenseValidationDomain", AppDomain.CurrentDomain.Evidence, appDomainSetup); UnloadableLicenseValidator unloadableLicenseValidator = (UnloadableLicenseValidator)appDomain.CreateInstanceFromAndUnwrap( Assembly.GetExecutingAssembly().CodeBase, "QualiSystems.Driver.IXN+TestShellRuntimeLocator+UnloadableLicenseValidator"); bool isRuntimeLicenseValid = unloadableLicenseValidator.IsLicenseValid(runtimeAssemblyPath, testShellRuntimeInfo.RuntimeLicenseValidatorTypeName); AppDomain.Unload(appDomain); Trace.WriteLine("Quali Runtime: Runtime at " + testShellRuntimeInfo.Path + " is " + (isRuntimeLicenseValid ? "Licensed" : "Unlicenced")); return(isRuntimeLicenseValid); }
public TestShellRuntimeLocator(string targetRuntimeVersion) { Trace.WriteLine("Quali Runtime: Target runtime version is " + targetRuntimeVersion + ", searching for matching installed versions..."); var runtimeInfos = ReadInstalledTestShellRuntimeInfos(targetRuntimeVersion); TestShellRuntimeInfo selectedRuntimeInfo = SelectRuntimeVersionInfo(runtimeInfos, targetRuntimeVersion); RuntimeTypeName = selectedRuntimeInfo.RuntimeTypeName; string runtimeAssemblyPath = Path.Combine(selectedRuntimeInfo.Path, selectedRuntimeInfo.RuntimeAssemblyName); if (!System.IO.File.Exists(runtimeAssemblyPath)) { throw RuntimeAssemblyNotFound(runtimeAssemblyPath); } Trace.WriteLine("Quali Runtime: Loading runtime version " + selectedRuntimeInfo.Version + " from " + runtimeAssemblyPath); RuntimeAssembly = Assembly.LoadFrom(runtimeAssemblyPath); }
private static TestShellRuntimeInfo GetCurrentlyLoadedRuntimeInfo(IEnumerable <TestShellRuntimeInfo> readTestShellRuntimeInfo) { TestShellRuntimeInfo matchingRuntime = null; foreach (var loadedAssembly in AppDomain.CurrentDomain.GetAssemblies()) { try { matchingRuntime = readTestShellRuntimeInfo.FirstOrDefault(r => string.Equals(loadedAssembly.Location, Path.Combine(r.Path, r.RuntimeAssemblyName), StringComparison.InvariantCultureIgnoreCase)); if (matchingRuntime != null) { Trace.WriteLine("Quali Runtime: " + string.Format("Runtime version {0} already loaded.", matchingRuntime.Version)); break; } } catch (NotSupportedException) {} } return(matchingRuntime); }
private static IEnumerable <TestShellRuntimeInfo> ReadInstalledTestShellRuntimeInfos(string targetRuntimeVersion) { RegistryKey testShellRuntimeRepositoryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(RuntimeRepositoryPath); if (testShellRuntimeRepositoryKey == null || testShellRuntimeRepositoryKey.SubKeyCount == 0) { throw NoMatchingRuntimeException(targetRuntimeVersion); } List <TestShellRuntimeInfo> testShellRuntimeInfos = new List <TestShellRuntimeInfo>(); foreach (var subKeyName in testShellRuntimeRepositoryKey.GetSubKeyNames()) { var runtimeKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(Path.Combine(RuntimeRepositoryPath, subKeyName)); TestShellRuntimeInfo testShellRuntimeInfo = new TestShellRuntimeInfo(); testShellRuntimeInfo.Path = (string)runtimeKey.GetValue("Path"); testShellRuntimeInfo.Version = (string)runtimeKey.GetValue("RuntimeVersion") ?? (string)runtimeKey.GetValue("Version"); testShellRuntimeInfo.RuntimeAssemblyName = (string)runtimeKey.GetValue("RuntimeAssembly"); testShellRuntimeInfo.RuntimeTypeName = (string)runtimeKey.GetValue("RuntimeType"); testShellRuntimeInfo.RuntimeLicenseValidatorTypeName = (string)runtimeKey.GetValue("RuntimeLicenseValidatorType"); testShellRuntimeInfos.Add(testShellRuntimeInfo); } return(testShellRuntimeInfos); }