Brazil's biggest MU Online portal — since 2003
Tutorial Intermediate Client

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.

BR Bruno · Updated on Jul 14, 2026 · ⏱ 12 read
Quick answer

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.

Before packaging, get organized. A typical client structure (varies by season/client) looks like this:

ItemFunctionInclude in the installer?
main.exeMain game executableYes
Data\Models, textures, maps (BMD/OZB/OZJ/OZT)Yes
Data\Local\Localized interface and textYes
Music\ and Sound\AudioYes (or optional)
launcher.exeServer launcher/updaterYes (recommended)
protection *.dllAnti-cheat / DirectX wrappersYes
readme.txtInstructions and quick rulesOptional
*.pdb, *.log, dump\DebuggingNo

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:

  1. 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.
  2. NSIS — extremely flexible and lightweight, generates smaller installers, but the scripting language is more raw.
  3. 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=yes with lzma2/max usually yields the best ratio for MU clients.
  • [Files] packages everything inside cliente_release, recursively. ignoreversion ensures 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:

  1. The installation picks a folder correctly and creates shortcuts.
  2. The game opens and connects to the server after installing.
  3. Uninstallation removes the files (keep Save/configs if needed).
  4. 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.

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

ErrorLikely causeFix
Antivirus deletes the installerFalse positive on a wrapper/launcherSign the .exe, submit to vendors, use Themida with care
"d3dx9_XX.dll is missing"DirectX absent on the player's machineInclude and run dxwebsetup.exe /Q in [Run]
Client opens but doesn't connectMain.exe pointing to a local/wrong IPRe-edit the Main with the public IP and recompile the setup
Old DLL doesn't updateMissing the ignoreversion flagAdd ignoreversion in the [Files] section
Giant installerIncluded Music/Sound without solid compressionEnable SolidCompression=yes and lzma2/max
Shortcut opens nothingFilename pointing to the wrong pathUse {app}\main.exe, test on a clean machine
"Unknown publisher" scares playersUnsigned executableGet 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_release folder, 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
  • .iss script 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.txt generated 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.

BR
Events, maps & items editor

Bruno specializes in MU Online events, maps, bosses and item economy. He documents every detail based on real gameplay.

Keep reading

Related articles