A Windows CS 1.6 server is the fastest way to get something running, and it is perfectly fine for a LAN, a test box, or a small public server. It is not what you want for a busy 32-slot public — Windows HLDS is measurably slower per tick than hlds_linux and the tooling around it is worse. But the install is short and the failure modes are well understood.
1. Download SteamCMD
Grab steamcmd.zip from Valve's developer wiki and extract it to a path with no spaces and no non-ASCII characters — for example C:\steamcmd. Paths like C:\Users\Bogdan\Desktop\Neue Ordner\ break the HLDS console in ways that are not worth debugging.
Run it once so it self-updates:
C:\steamcmd\steamcmd.exe +quit
2. Install App 90
Open cmd.exe (not PowerShell — the + arguments are fine either way, but PowerShell mangles some quoting) and run:
C:\steamcmd\steamcmd.exe +force_install_dir C:\hlds ^ +login anonymous ^ +app_set_config 90 mod cstrike ^ +app_update 90 validate ^ +quit
Run it a second time. App 90's anonymous download is notorious for finishing the base Half-Life content and skipping cstrike\ on the first pass. When it is complete you must have:
C:\hlds\hlds.exe C:\hlds\cstrike\liblist.gam C:\hlds\cstrike\dlls\mp.dll
If mp.dll is missing, the mod did not install and no amount of configuration will help.
3. Configure the server
Create C:\hlds\cstrike\server.cfg with Notepad (save as All Files, not server.cfg.txt — Explorer hides the extension by default, and this trips people up every single time):
hostname "My CS 1.6 Server" rcon_password "a-long-random-password" sv_lan 0 sv_password "" mp_timelimit 30 mp_autoteambalance 1 mp_friendlyfire 0 mp_freezetime 3 sv_maxrate 25000 sv_minrate 15000 sv_maxupdaterate 101 sv_minupdaterate 30 log on
Turn on file extensions in Explorer (View → Show → File name extensions) before you do anything else. A server.cfg.txt is the single most common reason server.cfg settings do not apply.
4. Create a start batch file
C:\hlds\start.bat:
@echo off cd /d C:\hlds hlds.exe -console -game cstrike -insecure -port 27015 +map de_dust2 +maxplayers 20 +sv_lan 0 pause
-console gives you the plain text console instead of the old MFC dialog window; it is far easier to read and to copy errors out of. Drop -insecure if you want VAC (it does very little for CS 1.6 today, but it removes the "not VAC secured" warning). pause keeps the window open so you can actually read the crash message instead of watching it vanish.
5. Windows Firewall
Windows will pop a prompt the first time hlds.exe binds a socket, and people reflexively click Cancel. Add the rules explicitly instead. Open an Administrator PowerShell:
New-NetFirewallRule -DisplayName "HLDS UDP 27015" -Direction Inbound -Protocol UDP -LocalPort 27015 -Action Allow New-NetFirewallRule -DisplayName "HLDS TCP 27015" -Direction Inbound -Protocol TCP -LocalPort 27015 -Action Allow
UDP 27015 is the game. TCP 27015 is RCON. If your server is at home behind a router, you also need to forward both to the machine's LAN IP — see running a server behind NAT.
6. Optional: run it as a service
HLDS has no service mode. If you want it to survive a reboot without a logged-in session, the practical options are Task Scheduler (trigger: At startup, run whether user is logged on or not, working directory C:\hlds) or a supervisor such as NSSM. Task Scheduler is enough for most people; just remember to set Start in to C:\hlds or HLDS will not find cstrike and will die with Could not find liblist.gam.
Common errors
Could not launch game. Please ensure you have the latest version— you launchedhlds.exefrom the wrong working directory. Alwayscd /d C:\hldsfirst.Couldn't allocate dedicated server IP port 27015— another HLDS instance is running, or a Steam client is holding the port. Check withnetstat -ano | findstr 27015and kill the PID.- Server visible on LAN only —
sv_lan 1, or your router is not forwarding UDP 27015. The internet list needssv_lan 0and a reachable public UDP port. - Console window closes instantly — you started it without
pauseand it crashed. Addpause, rerun, read the last line. - Antivirus quarantines
hlds.exe— several engines flag Metamod/AMXX DLLs as trojans (false positive). ExcludeC:\hldsbefore you install plugins.
Verification
In the HLDS console type status. You should see the map name, players : 0 active (20 max), and your public IP. Then from a CS 1.6 client on another machine:
connect YOUR_PUBLIC_IP:27015
If it connects, the port is open and the mod loaded. To check the server is reaching the internet list, run heartbeat in the console and look for master-server traffic; if it never appears, read why a server does not show in the internet list.
Where to go next
Windows HLDS can run the modern stack too: ReHLDS on Windows, then Metamod-r and AMX Mod X 1.9. If you plan to actually grow the server, weigh the platforms first: Windows vs Linux for a CS 1.6 server.









