That switch only writes an entry on your behalf
The launch-at-startup checkbox in your client is not doing anything clever. On Windows it writes a line into the registry's Run key, or drops a shortcut into the Startup folder; on macOS it registers itself as a login item. After that it is out of the picture, and whether the program actually comes up is the operating system's call. Which is why ticking the box again and again solves nothing — the answer is on the system side.
SponsoredWhere does the subscription link come from?Our partner provider gives you 1 GB of high-speed Hong Kong data at signup — import it in one click.Get high-speed nodesWindows: the real reasons a startup entry stops firing
- The system disabled it. Open Task Manager, switch to the Startup apps tab, find the entry and check whether it says enabled or disabled. Windows turns items off on its own when it decides they slow down boot, and security software will quietly do the same to whatever it considers unnecessary. Flip it back right there.
- The program needs administrator rights. This is the sneaky one. Ordinary startup entries launch with your normal user privileges, so anything that requests elevation is stopped by UAC and fails without a word. Installing the TUN service mode removes the need for elevation; otherwise build a login-triggered task in Task Scheduler with run with highest privileges checked.
- The path changed. You moved the install folder, relocated a portable build, or migrated to another drive, and the registry entry still points at the old location. Windows finds nothing there, reports nothing, and simply does not start it. Toggle the client's autostart switch off and on so it rewrites the entry.
- A major Windows feature update reset it. This is not imagination — feature updates really do clear out some third-party startup entries. Check the list after every big update.
There is also a half-failure worth knowing about: the program does start, just too early. At that moment the network adapter is not ready, so the subscription fetch fails and every latency test times out, which looks exactly like it never launched. Look for a delayed-start option in the client, or set a delay of thirty seconds or so on a Task Scheduler task.
macOS: login items and background permission are two things
System Settings, under General and then Login Items, shows you two lists. The upper one holds what opens at login; the lower one governs apps and extensions allowed to run in the background. A client that appears in the upper list but has been switched off in the lower one still will not start, and nothing tells you why. The background helper that TUN relies on lives in that lower list too, so turning it off breaks autostart and TUN together. One more trap: if you ran the app straight out of Downloads and later moved it into Applications, the login item points at a location that no longer exists and has to be added again.
The tray icon is gone
- Windows 11 folds icons it considers infrequent into the overflow area behind the small arrow on the taskbar. To keep one visible permanently, open taskbar settings and turn the entry on under other system tray icons.
- explorer.exe crashed and restarted. The tray is drawn by explorer, so when it comes back, any program that does not re-register its icon loses it — while the program itself carries on perfectly well.
- On Linux, GNOME ships without a tray by default and Wayland makes it worse; you need an AppIndicator-style extension before there is anywhere to put the icon. That one is not the client's fault.
The step that decides everything: is the process still running?
netstat -ano | findstr 7890
tasklist | findstr mihomo
lsof -i :7890
First two lines are for Windows, the last one for macOS and Linux; swap in your own mixed-port. If anything comes back, the program is still running in the background and only the icon is missing. Double-clicking the executable now will usually fail, or start a second instance that dies because the port is taken. The right order is to kill the old process in Task Manager first, then launch again.
- Try running the executable once more. Many clients implement single-instance detection and will bring the existing window to the front instead of opening a new one.
- Check whether the client has a global hotkey for showing the main window — some ship with one bound by default.
- If neither works, end the process from Task Manager or Activity Monitor and start over. The system proxy setting may still be sitting there, so check it while you are at it.