20 if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
22 var discovered =
new HashSet<AbsolutePath>();
23 var launcherDatRelative =
"UnrealEngineLauncher/LauncherInstalled.dat";
24 var centralLauncherDat = EnvironmentInfo.SpecialFolder(SpecialFolders.CommonApplicationData) /
"Epic" / launcherDatRelative;
25 var userLauncherDat = EnvironmentInfo.SpecialFolder(SpecialFolders.LocalApplicationData) / launcherDatRelative;
29 if (discovered.Add(instance.Path))
30 yield
return instance;
34 if (discovered.Add(instance.Path))
35 yield
return instance;
50 using (var installed = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\EpicGames\Unreal Engine"))
52 if (installed !=
null)
54 foreach (var subKeyName
in installed.GetSubKeyNames())
56 using var subKey = installed.OpenSubKey(subKeyName)!;
57 var candidate = subKey.GetValue(
"InstalledDirectory") as string;
58 if (candidate ==
null)
continue;
60 var path = AbsolutePath.Create(candidate);
61 if (!path.DirectoryExists())
continue;
63 if (discovered.Add(path))
64 yield
return new(subKeyName, path);
68 using (var sources = Registry.CurrentUser.OpenSubKey(
@"Software\Epic Games\Unreal Engine\Builds"))
72 foreach (var valueName
in sources.GetValueNames())
74 var candidate = sources.GetValue(valueName) as string;
75 if (candidate ==
null)
continue;
77 var path = AbsolutePath.Create(candidate);
78 if (!path.DirectoryExists())
continue;
80 var instanceName = valueName;
84 instanceName = $
"{buildVersion.MajorVersion}.{buildVersion.MinorVersion}";
87 if (discovered.Add(path))
88 yield
return new(instanceName, path);
94 else throw new Exception(
"Trying to use windows implementation of IUnrealLocator on a non-windows platform");