Fixes & Performance

KF2 on Proton: Stop .NET 3.5 Reinstalling on Every Launch

When Killing Floor 2 runs through Steam Play (Proton) on Linux, some setups show the "Running first-time setup" window and install Microsoft .NET Framework 3.5 again on every launch. It wastes time and can occasionally fail and block the start. A tiny registry file published as a GitHub gist in April 2020 fixes it by telling Steam that .NET 3.5 is already there. For the general picture of running the series on Linux, see Killing Floor on Linux: native vs Proton.

Why it happens

Steam games declare the redistributables they need (DirectX, Visual C++, .NET and so on). Before a game starts, Steam runs an install script for those packages and records each successful install in the registry under HKLM\Software\Wow6432Node\Valve\Steam\Apps\CommonRedist. Next time it reads that key and skips what is already done.

Inside a Proton prefix the .NET 3.5 step does not leave that marker behind, so Steam thinks the package is still missing and runs the installer again on the next launch, and the one after that.

The registry file

The whole fix is this .reg file (save it as dotnet35.reg):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\CommonRedist\.NET\3.5]
"3.5 SP1"=dword:00000001

It creates the .NET\3.5 key under Steam's CommonRedist branch and sets 3.5 SP1 to 1, the same marker a successful install would write. It does not install or remove anything.

How to apply it

The file has to be imported into KF2's own Proton prefix, not into a random Wine prefix. Killing Floor 2's Steam AppID is 232090, so the prefix is:

~/.steam/steam/steamapps/compatdata/232090/pfx

(On some systems the Steam root is ~/.local/share/Steam instead. If KF2 lives in another library, look for compatdata/232090 inside that library's steamapps folder.)

Launch the game once through Proton first so the prefix exists, then close it. Pick one of the two methods below.

Option A: protontricks

protontricks runs commands inside a Steam game's prefix with the right Proton build:

protontricks -c 'wine regedit /full/path/to/dotnet35.reg' 232090

Option B: plain Wine with WINEPREFIX

WINEPREFIX=~/.steam/steam/steamapps/compatdata/232090/pfx wine regedit /full/path/to/dotnet35.reg

Using the same Proton build's wine binary is the safest choice, but for a single registry import a system Wine usually works too.

Check the result

Start KF2 from Steam. The first-time setup window should either not appear or finish instantly without the .NET 3.5 installer. If it still runs, check that you imported into compatdata/232090 and not another prefix.

If something goes wrong

  • Wrong prefix: re-run the import with the correct path; the extra key in another prefix is harmless.
  • Game still will not start: the .NET loop may not be your problem. See KF2 not launching in Steam and KF2 slow startup.
  • Start clean: delete compatdata/232090. Steam recreates the prefix on the next launch (and runs first-time setup again), after which you can re-apply the fix.

Notes

  • The fix does not touch game files, so it survives updates. It only disappears if the prefix is deleted.
  • Steam Deck users can apply it from Desktop Mode with protontricks (available as a Flatpak).
  • Newer Proton versions may handle this step correctly on their own. If you never see the .NET installer on launch, you do not need this fix.

FAQ

Why does KF2 install .NET 3.5 every time on Linux?
Steam runs the game's first-time setup for its redistributables inside the Proton prefix. It decides whether .NET 3.5 is installed by checking a registry key under CommonRedist. If that key is missing, it runs the installer again on every launch.
What does the registry fix do?
It writes the value "3.5 SP1"=dword:00000001 to HKLM\Software\Wow6432Node\Valve\Steam\Apps\CommonRedist\.NET\3.5, which marks .NET 3.5 as already installed so Steam skips that step.
Is the fix risky?
It only adds one value to the game's own Proton prefix. If something breaks, delete the prefix (compatdata/232090) and Steam will recreate it on the next launch.
Does this apply to Windows players?
No. It is meant for Killing Floor 2 running through Steam Play (Proton) on Linux, including the Steam Deck.