JosefNemec/Playnite · error · Exception

Can't find built-in {builtIn.BuiltInProfileName} emulator pr

Error message

Can't find built-in {builtIn.BuiltInProfileName} emulator profile.

What it means

Thrown by GenericGameController.StartEmulator (the BuiltInEmulatorProfile branch) when Emulation.GetProfile(emulator.BuiltInConfigId, builtIn.BuiltInProfileName) returns null — the named built-in profile is not registered for that emulator's built-in config. Bare Exception with the offending profile name interpolated.

Source

Thrown at source/Playnite/Controllers/GenericGameController.cs:157

                    {
                        startupArgs = expandedProfile.Arguments;
                        if (!action.AdditionalArguments.IsNullOrEmpty())
                        {
                            startupArgs += " " + Game.ExpandVariables(action.AdditionalArguments, false, emulator.InstallDir, romPath);
                        }
                    }

                    startupDir = expandedProfile.WorkingDirectory;
                    startupPath = expandedProfile.Executable;
                    StartEmulatorProcess(startupPath, startupArgs, startupDir, emulator.InstallDir, romPath, asyncExec, emulator.GetClone(), expandedProfile.GetClone(), expandedProfile.TrackingMode, expandedProfile.TrackingPath);
                }
            }
            else if (currentEmuProfile is BuiltInEmulatorProfile builtIn)
            {
                var profileDef = Emulation.GetProfile(emulator.BuiltInConfigId, builtIn.BuiltInProfileName);
                if (profileDef == null)
                {
                    throw new Exception($"Can't find built-in {builtIn.BuiltInProfileName} emulator profile.");
                }

                if (profileDef.ScriptStartup)
                {
                    var def = Emulation.GetDefition(emulator.BuiltInConfigId);
                    if (def == null || !FileSystem.FileExists(Emulation.GetStartupScriptPath(def)))
                    {
                        throw new FileNotFoundException(ResourceProvider.GetString(LOC.ErrorEmulatorStartupScriptNotFound));
                    }

                    RunStartScriptFile(
                        $"{emulator.Name} runtime for {Game.Name}",
                        Emulation.GetStartupScriptPath(def),
                        emulator.InstallDir,
                        new Dictionary<string, object>
                        {
                            { "Emulator", emulator.GetClone() },
                            { "EmulatorProfile", profileDef.GetClone() },

View on GitHub (pinned to 5911f4e964)

Solutions

  1. Verify Emulation.GetProfile(id, name) returns non-null before launching (or that the profile is listed).
  2. Update the game action to a currently-available built-in profile.
  3. Ensure the emulator add-on supplying the built-in config is enabled and up to date.
  4. Restart/reload Playnite so built-in definitions are reloaded.

Example fix

// before
currentEmuProfile = builtIn;
controller.StartEmulator(action, asyncExec, args);

// after — confirm the built-in profile exists
if (Emulation.GetProfile(emulator.BuiltInConfigId, builtIn.BuiltInProfileName) == null)
{
    dialogs.ShowMessage($"Built-in profile '{builtIn.BuiltInProfileName}' is unavailable. Re-select it.");
    return;
}
currentEmuProfile = builtIn;
controller.StartEmulator(action, asyncExec, args);
Defensive patterns

Strategy: validation

Validate before calling

if (Emulation.GetProfile(emulator.BuiltInConfigId, builtIn.BuiltInProfileName) == null) throw new InvalidOperationException($"Profile {builtIn.BuiltInProfileName} missing");

Type guard

static bool BuiltInProfileExists(Emulator e, BuiltInEmulatorProfile b) => Emulation.GetProfile(e.BuiltInConfigId, b.BuiltInProfileName) != null;

Try / catch

try { controller.StartEmulator(action, asyncExec, args); }
catch (Exception ex) when (Emulation.GetProfile(emulator.BuiltInConfigId, builtIn.BuiltInProfileName) == null) { dialogs.ShowMessage("Built-in profile unavailable. Re-select it."); }

Prevention

When it happens

Trigger: A BuiltInEmulatorProfile referencing a profile name that no longer exists in the built-in definitions; BuiltInConfigId changed/removed; profile renamed between Playnite versions; emulator's built-in definitions failed to load.

Common situations: Playnite upgraded and a built-in profile was renamed/removed; emulator add-on providing the built-in config was disabled/uninstalled; stale BuiltInProfileName stored on the action.

Related errors


AI-assisted analysis of JosefNemec/Playnite@5911f4e964 (2026-08-13). Data as JSON: /api/errors/b056117f2ea0cb28. Report an issue: GitHub.