First identify whether the app window is crashing, the proxy core is exiting, or a background service is being stopped. Then troubleshoot by platform. On Windows, check the runtime, complete extraction, and write permissions. On Android, determine whether the app is closing or VPN authorization is failing before adjusting battery restrictions. Change one thing at a time, and keep your original configuration and error logs so you can pinpoint the cause without repeatedly reinstalling.
First, identify the issue: app crash, core exit, or dropped connection
“Won’t start” can describe several different problems. v2rayN is a GUI client, and opening its window is separate from starting the proxy core. v2rayNG also manages configurations through its interface before launching a service that uses the Xray core. If the window stays open but connections fail, the app hasn’t necessarily crashed. A denied VPN permission usually prevents the service from starting; it doesn’t mean the app process has crashed.
| What you see | What to check first | What not to do yet |
|---|---|---|
| No window appears after double-clicking; the process quickly exits | Runtime prompts, system events, package architecture | Keep changing subscriptions and routing rules |
| The window opens, but an error appears when connecting | Client logs, core files, listening ports | Blame every problem on .NET |
| The tray icon remains after closing the window | Window-close behavior and the tray menu | Mistake minimizing to the tray for a crash |
| Connection drops after switching to the background on Android | VPN status, battery settings, whether the process is still running | Clear app data immediately |
Before you start, note the OS version, system architecture, the client version shown on its About page, and when the issue occurred. If the interface opens, export your configuration first. If it won’t open at all, close related processes and back up the existing data directory. Subscription URLs, share links, and full configurations may contain credentials; remove them before sharing anything for troubleshooting.
Missing Windows runtime: install the one requested, not a guessed version
Different v2rayN releases may run differently. Packages that rely on system runtimes need the .NET runtime matching their version and architecture. Self-contained packages shouldn’t prompt you to install a collection of runtimes just because they crash. WPF packages typically need the Windows Desktop Runtime; the base .NET Runtime or ASP.NET Core Runtime alone may not be enough. .NET Framework and modern .NET are separate products.
Error: You must install or update .NET to run this application.
Cause: The required runtime framework wasn’t found, or its version or architecture doesn’t match. Fix: Check the Framework, Architecture, and Version shown in the dialog. Install the runtime required by the package, then restart the client.
Error: This app can't run on your PC
Cause: Windows can’t run the current executable. Possible causes include an architecture mismatch, an incompatible OS, or a damaged file. Fix: Check your system type in System Information, then download a complete package that matches it. Don’t treat this message alone as proof of a missing runtime.
Run the command below in PowerShell to list runtimes for the architecture used by the current dotnet command. If the command isn’t found, that only means the command isn’t available; it doesn’t prove that no .NET components are installed. If needed, also check Windows Settings → Apps → Installed apps.
dotnet --list-runtimes
- For WPF packages, check for
Microsoft.WindowsDesktop.App—not justMicrosoft.NETCore.App. - An x64 program needs the matching x64 runtime. Having runtimes for another architecture installed doesn’t satisfy that requirement.
- A newer major version doesn’t necessarily satisfy an app’s dependency on an older major version. Follow the startup prompt and package documentation; don’t judge by version numbers alone.
- If system events point to a configuration parsing or file access error, troubleshoot that issue instead of reinstalling runtimes again.
Extraction path and permissions: test with a standard user account first
Running a portable app from a compressed archive preview may leave it with access only to partially extracted temporary files. Extracting a new version over an old directory can also leave mismatched components. Extract all files to a separate directory your account can write to, such as %LOCALAPPDATA%\v2rayN-test, and launch it once with a blank configuration. This is an isolated test location, not a request to move your existing data.
-
Exit and back up
Exit v2rayN from the tray menu. In Task Manager → Details, make sure the related processes have ended. Then back up the original configuration and data directory so you don’t copy files while they’re being written.
-
Extract again
Choose a package that matches your OS and architecture on the download page. Extract every file in a portable package to a new directory; don’t run it from inside the archive or overwrite the old directory. Follow the installer steps for installer packages.
-
Start normally
Start the app as a standard user first, with TUN disabled and no original configuration imported. If the blank setup stays open, import nodes, subscriptions, and routing rules one at a time, restarting after each import to test.
-
Check for blocked files
Open Windows Security → Virus & threat protection → Protection history and check for a file block at the same time the issue occurred. Confirm the file’s source and what was blocked before taking action. Don’t disable protection altogether.
-
Elevate only if needed
Test as an administrator only when an operation involving TUN or a system service explicitly requires elevated permissions. If the app fails to start normally, check data-directory permissions and logs first; don’t use administrator access indefinitely to mask a directory problem.
If the window opens: check core logs, ports, and system events
If the main window is open but the log reports a listening error, the interface has usually started successfully. Find the earliest error in the log and read the lines around it, then check for a port conflict, missing core files, or a configuration parsing error. This example uses 127.0.0.1:10808 for checking; it isn’t a fixed setting across all versions. Use the client’s current settings and logs to confirm the actual port.
Check for a listening process in PowerShell. No output means no TCP listener was found on that port at that moment; it doesn’t confirm that other protocols or ports are working. If a process appears, identify it before taking action. Don’t force-quit an unknown process.
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
Bottom line: if the interface works, troubleshoot the service startup chain first
If a blank configuration opens reliably but enabling a connection triggers a listening error, first address duplicate processes or a port conflict, then retry the same configuration. Reinstalling .NET usually won’t fix a port conflict.
If the main process has actually exited, press Win + R, enter eventvwr.msc, then open Windows Logs → Application. Check entries from Application Error, .NET Runtime, or Windows Error Reporting around the time of the crash. Events 1000 and 1001 can help with your search, but they don’t always appear for every crash. Record the faulting application, faulting module, exception code, and time; an event ID alone isn’t enough to identify the cause.
- Configuration parsing error: Keep a copy of the original file. Test a blank configuration in an isolated directory, then import settings in batches. Don’t delete your only copy of the data.
- Missing core files: Check that extraction completed and review Protection history. Don’t replace executable files individually from an untrusted source.
- Changing ports: Also check proxy environment variables in the terminal, manual browser proxy settings, and other programs using that port. Otherwise, an app may keep connecting to the old port after the client is fixed.
Android: tell a v2rayNG crash from a VPN startup failure
If v2rayNG opens and displays your nodes normally but fails when you tap Connect, first check whether Android showed a VPN permission prompt. Canceling the prompt, device policies that prevent VPN connections, or another VPN service already in use can stop the service from starting without crashing the interface. v2flyNG uses the V2Fly core and also requires Android VPN authorization; switching clients won’t bypass system permissions.
- Disconnect other VPNs first: Open Settings and search for “VPN.” Disconnect any other active VPN. If Always-on VPN is enabled, check whether it points to another app. On a managed device, contact your administrator first.
- Request authorization again: Return to v2rayNG, select a configuration, and start the connection. Approve the prompt only if it identifies the expected app. If no prompt appears, check whether authorization was already granted or a device policy is blocking it.
- Check the foreground state: Keep the screen on and leave the app in the foreground to see whether the connection stays up. Notification permission affects whether status notifications are visible, but no notification doesn’t mean the process has stopped—and notifications alone can’t confirm a crash.
- Check background restrictions: Long-press the app icon → App info → Battery or App battery management. Look for options such as “Unrestricted” or “Allow background activity.” Labels vary by Android version and device maker, so also check the manufacturer’s autostart settings.
If the app immediately returns to the home screen and you can’t even view the configuration list, check the package architecture, OS compatibility requirements, and available storage. If you don’t know the processor architecture, choose a suitable universal package from the download page. Record installation failures separately from crashes after launch. Don’t clear app data under Storage first; that deletes local configurations. Export or back up any data you can access.
macOS and Linux: check architecture, installation method, and write location
Don’t apply the Windows runtime fix to every desktop issue. On macOS, check the chip type in About This Mac and choose an arm64 or x64 package. On Linux, check both the processor architecture and the distribution’s package format. Package installation, GUI startup, and TUN creation are three separate stages to troubleshoot.
- macOS: Follow the package instructions to install it before launching; don’t keep running it from a mounted disk image. If macOS blocks it, open System Settings → Privacy & Security and review the relevant message. Confirm the package source; don’t disable security checks globally.
- Linux: Prefer a deb or rpm package suited to your distribution, and read any dependency messages from the package manager. Launch the installed program from a terminal to capture startup errors instead of relying only on whether the desktop icon responds.
- Permissions: The standard interface shouldn’t require elevated permissions all the time. If only TUN operations fail, follow that platform’s permission requirements. If a previous elevated launch created the data directory, back it up before fixing file ownership.
FAQ: reinstalling, restoring settings, and verifying the fix
Why does v2rayN still crash after I installed .NET?
Compare the framework name, version, and architecture in the prompt, then run dotnet --list-runtimes to check. If the required runtime is present, check system events and test with a blank configuration. Don’t blame every startup failure on the runtime.
It works when run as an administrator. Can I keep using it that way?
First test with a standard account in a new directory you can write to. If normal startup works there, investigate permissions on the original directory. Elevate only for network features that explicitly require it; don’t use administrator access as a substitute for finding the cause.
What if the crash comes back after I restore my configuration?
Keep the original backup and restore settings in an isolated environment: import one node first, then restore the subscription, and finally restore custom routing and other settings. If the problem returns at a particular step, keep the logs and configuration differences from that step. Don’t repeatedly test by overwriting everything at once.
Does v2rayNG disconnecting when the screen locks mean I have to clear app data?
No. First check battery and background activity settings in App info, and make sure another VPN hasn’t taken over the connection. Then test again with the screen locked. Clearing app data won’t fix system battery settings and may delete subscriptions and nodes.
After fixing the issue, verify everything in the same order: the app opens normally, connecting no longer produces an error, the app can be reopened after you exit, and behavior remains stable when switching between foreground and background and after a reboot. Opening a website in a browser only confirms that one app accessed the web; it doesn’t verify the terminal, split routing, or every traffic-routing method. If you still need help, share the OS and client versions, reproduction steps, exact time, and the first error with sensitive details removed. This is more useful for troubleshooting than simply saying “it crashed.”