How to package the MU Online client for distribution (installer)
Learn to turn the MU Online client folder into a professional installer, with shortcuts, version tracking, and integrity checking to distribute to players.
Packaging the MU Online client is the step that separates an amateur project from a server that conveys credibility on first contact. The player downloads a single file, runs it, picks a folder, gets a desktop shortcut, and opens the game. No loose ZIP with dozens of DLLs scattered around, no "extra
Packaging the MU Online client is the step that separates an amateur project from a server that conveys credibility on first contact. The player downloads a single file, runs it, picks a folder, gets a desktop shortcut, and opens the game. No loose ZIP with dozens of DLLs scattered around, no "extract here and pray it works". A well-made installer reduces support, lowers the drop-off rate on the download, and even protects the integrity of the files you distribute.
In this tutorial you will build, from scratch, a professional installer for your server's client using Inno Setup (with mentions of NSIS as an alternative). We'll cover preparing the base folder, the build script, shortcuts, icon, version checking, system requirements, digital signing, and the most common pitfalls that make the player's antivirus delete your client before the first login. The values cited (DirectX versions, size, folder names) are examples and vary by season/client.
If you don't yet have the server base running, start with the guide on how to set up a MU Online server and come back here once the client is already connecting to your Season.
Prerequisites
Before opening any packaging tool, have these at hand:
- A working, tested client folder, connecting to your server's IP/port. If the client doesn't open on your machine, it won't open packaged either.
- An edited Main.exe (via a Main editor compatible with your season) pointing to the public IP or domain, the Connect Server port, and the correct serial.
- Protection files (anti-cheat/packet, e.g. GameGuard, Themida wrap, or whatever scheme your season uses) already integrated and tested.
- Inno Setup 6+ installed (free, at jrsoftware.org) or NSIS 3+.
- The server's .ico icon (256x256 recommended) for the shortcut and the installer executable.
- Disk space equal to at least 2x the client size, to generate the setup without a squeeze.
- Optional, but recommended: a code-signing certificate to reduce antivirus alerts.
A golden tip: create a clean folder called cliente_release and copy only the files the player needs. Do not include .pdb, logs, dumps, .bak files, Main editors, or internal tools. Every unnecessary file increases the download and the risk of a false positive.
Recommended client folder structure
Before packaging, get organized. A typical client structure (varies by season/client) looks like this:
| Item | Function | Include in the installer? |
|---|---|---|
main.exe | Main game executable | Yes |
Data\ | Models, textures, maps (BMD/OZB/OZJ/OZT) | Yes |
Data\Local\ | Localized interface and text | Yes |
Music\ and Sound\ | Audio | Yes (or optional) |
launcher.exe | Server launcher/updater | Yes (recommended) |
protection *.dll | Anti-cheat / DirectX wrappers | Yes |
readme.txt | Instructions and quick rules | Optional |
*.pdb, *.log, dump\ | Debugging | No |
Run the client one last time from this clean folder. If it logs in normally, it's ready to become an installer.
Step 1 — Choosing the packaging tool
There are three common approaches:
- Inno Setup — the most popular in the MU scene. Readable script (Pascal-like), plentiful documentation, strong LZMA2 compression support, customizable pages, and simple post-installation.
- NSIS — extremely flexible and lightweight, generates smaller installers, but the scripting language is more raw.
- Commercial packagers (InstallShield, Advanced Installer) — polished, but paid and overkill for this case.
For 90% of servers, Inno Setup is the right choice: free, robust, and easy to maintain across seasons. We'll go with it.
Step 2 — Creating the Inno Setup script
Install Inno Setup and open the Compiler. You can use the Script Wizard, but writing the .iss by hand gives you much more control. Create a setup.iss file next to the cliente_release folder with the content below (adjust names, versions, and paths to your project):
[Setup]
AppName=ViciadosMU Season X
AppVersion=1.0.0
AppPublisher=ViciadosMU
DefaultDirName={autopf}\ViciadosMU
DefaultGroupName=ViciadosMU
UninstallDisplayIcon={app}\main.exe
OutputBaseFilename=ViciadosMU_Setup_v1.0.0
Compression=lzma2/max
SolidCompression=yes
SetupIconFile=icone.ico
WizardStyle=modern
PrivilegesRequired=admin
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "brazilian"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
[Files]
Source: "cliente_release\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs ignoreversion
[Icons]
Name: "{group}\ViciadosMU"; Filename: "{app}\main.exe"
Name: "{group}\Uninstall ViciadosMU"; Filename: "{uninstallexe}"
Name: "{autodesktop}\ViciadosMU"; Filename: "{app}\main.exe"; Tasks: desktopicon
[Tasks]
Name: "desktopicon"; Description: "Create a Desktop shortcut"; GroupDescription: "Shortcuts:"
[Run]
Filename: "{app}\main.exe"; Description: "Launch the game now"; Flags: nowait postinstall skipifsilent
Each section has a role:
- [Setup] defines the name, version, default folder (
{autopf}= Program Files), icon, and compression.SolidCompression=yeswithlzma2/maxusually yields the best ratio for MU clients. - [Files] packages everything inside
cliente_release, recursively.ignoreversionensures the files are always replaced, avoiding the classic bug of an old DLL not being updated. - [Icons] creates the shortcuts in the Start menu and, optionally, on the desktop.
- [Tasks] turns the desktop shortcut into an option the player can check.
- [Run] offers to launch the game at the end of the installation.
Step 3 — Compiling the installer
In the Inno Setup Compiler, open setup.iss and press F9 (or Build > Compile). At the end, the installer will appear in Output\ViciadosMU_Setup_v1.0.0.exe. Test it on a clean machine (or virtual machine) with no client installed: that's the only reliable way to discover missing dependencies.
During the test, confirm:
- The installation picks a folder correctly and creates shortcuts.
- The game opens and connects to the server after installing.
- Uninstallation removes the files (keep
Save/configs if needed). - No essential file was left out (test on a machine that never had MU).
Step 4 — System requirements and dependencies
MU clients usually depend on DirectX 9.0c and, depending on the season, on the Visual C++ Redistributable and the .NET Framework (for launchers). Never assume the player's machine has everything. Include the redistributables and run them silently:
[Files]
Source: "redist\dxwebsetup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
Source: "redist\vc_redist.x86.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
[Run]
Filename: "{tmp}\vc_redist.x86.exe"; Parameters: "/quiet /norestart"; StatusMsg: "Installing components..."
Filename: "{tmp}\dxwebsetup.exe"; Parameters: "/Q"; StatusMsg: "Verifying DirectX..."
This eliminates the vast majority of "the program couldn't start because xxxx.dll is missing" errors. The exact versions vary by season/client.
Step 5 — Integrity and version checking
To prevent the player from running a half-corrupted client (interrupted download), the installer already guarantees the integrity of the internal files via the .exe's own checksum. But you should also version the client so the launcher knows when to update. A common practice is to generate a version.txt file in the root with the version and a hash of the folder:
version=1.0.0
build=20251026
data_hash=8f3c9e1a...
The launcher, on opening, reads this file, compares it with the patch server, and downloads only what changed. That way future updates don't require a new full installer.
Step 6 — Digital signing (optional, but recommended)
The biggest enemy of distribution isn't the player: it's the antivirus. Packaged installers, launchers, and protection wrappers are frequently flagged as suspicious. Signing the .exe with a code-signing certificate greatly reduces false positives and shows your project's name in the Windows prompt (instead of "Unknown publisher"). In Inno Setup, configure the signer:
[Setup]
SignTool=meucert
And register the signing tool (signtool.exe) in Inno Setup's preferences. Without a certificate, at least submit your installer to the "false positive" forms of the major antivirus vendors before release.
Common errors and fixes
| Error | Likely cause | Fix |
|---|---|---|
| Antivirus deletes the installer | False positive on a wrapper/launcher | Sign the .exe, submit to vendors, use Themida with care |
| "d3dx9_XX.dll is missing" | DirectX absent on the player's machine | Include and run dxwebsetup.exe /Q in [Run] |
| Client opens but doesn't connect | Main.exe pointing to a local/wrong IP | Re-edit the Main with the public IP and recompile the setup |
| Old DLL doesn't update | Missing the ignoreversion flag | Add ignoreversion in the [Files] section |
| Giant installer | Included Music/Sound without solid compression | Enable SolidCompression=yes and lzma2/max |
| Shortcut opens nothing | Filename pointing to the wrong path | Use {app}\main.exe, test on a clean machine |
| "Unknown publisher" scares players | Unsigned executable | Get a code-signing certificate |
Distribution best practices
- Never distribute the entire development folder. Always start from a clean
cliente_release. - Host the installer on at least two mirrors (e.g. one storage service and one mirror of your own), avoiding a single point of failure on launch day.
- Publish the installer's MD5/SHA-256 hash on the site so the player can check integrity.
- Keep a visible changelog: players trust projects that document what changes in each version.
- Test on Windows 10 and 11 and, if possible, on a machine without administrator privileges to see UAC behavior.
Launch checklist
- Clean
cliente_releasefolder, with no debug files or editors - Main.exe pointing to the correct IP/port/serial and tested
- Protection files integrated and validated
- Redistributables (DirectX, VC++) included and running silently
.issscript compiled without warnings- Installation tested on a clean machine/VM (no prior MU)
- Menu and desktop shortcuts working
- Game connects to the server after installing
- Uninstallation removing files correctly
version.txtgenerated for the patch launcher- Installer signed (or submitted for false positives to the antivirus vendors)
- SHA-256 hash published and two download mirrors active
With the installer ready, tested on a clean machine, and signed, your server delivers the first impression of a serious project. The natural next step is to reduce the download size so that more players complete the installation without giving up halfway.
Frequently asked questions
Do I have to pay for an installer?
No. Tools like Inno Setup and NSIS are free and cover 99% of a MU Online server's needs.
The antivirus flags my installer as a virus, is that normal?
False positives are common with packaged launchers and installers. Signing the executable with a code-signing certificate and submitting it to antivirus vendors drastically reduces the problem.
Should I include the already-edited Main.exe in the installer?
Yes, the distributed client should contain the Main already pointing to your server's IP/port and serial, plus the configured protection files.
What is the difference between an installer and a compressed archive?
The archive just extracts files; the installer creates shortcuts, registers the version, validates requirements, and allows a clean uninstall, giving the player more confidence.
Can I update the client later without reinstalling?
Yes. Ideally the installer places a launcher that does incremental patching, avoiding full downloads every season.