internal static RegistryView ToRegistryView(this ClrBitness bitness) { return(bitness switch { ClrBitness.Bitness32 => RegistryView.Registry32, ClrBitness.Bitness64 => RegistryView.Registry64, _ => throw new ArgumentOutOfRangeException(nameof(bitness), bitness, null) });
private static string GetInstallationRootPath(ClrBitness bitness) { using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, bitness.ToRegistryView())) { using (var installRootKey = baseKey.OpenSubKey(NET_FRAMEWORK_REGISTRY_KEY_NAME) ?? throw new InvalidOperationException($"The key '{NET_FRAMEWORK_REGISTRY_KEY_NAME}' does not exist.")) { return(installRootKey.GetValue("InstallRoot") as string); } } }
private static string GetBizTalkConfigurationFile(ClrBitness bitness) { var fileName = bitness switch { ClrBitness.Bitness32 => "BTSNTSvc.exe.config", ClrBitness.Bitness64 => "BTSNTSvc64.exe.config", _ => throw new ArgumentOutOfRangeException(nameof(bitness), bitness, "Unexpected CLR bitness value.") }; return(Path.Combine(BizTalkInstallation.InstallationPath, fileName)); }
public static string GetPath(Version version, ClrBitness bitness) { var installationRootPath = GetInstallationRootPath(bitness); if (!Directory.Exists(installationRootPath)) { throw new DirectoryNotFoundException($"The installation root path '{installationRootPath}' is not found."); } return(Directory.GetDirectories(installationRootPath, $"v{version.Major}.{version.Minor}*", SearchOption.TopDirectoryOnly) .OrderBy(d => d, StringComparer.OrdinalIgnoreCase) .Single()); }