Skip to content

v2rayN Won’t Open or Keeps Crashing? Troubleshoot .NET, Permissions, and Config Files

Troubleshoot v2rayN crashes on startup in order: missing runtimes, folder permissions or antivirus blocks, and corrupted config files. Includes v2rayNG crash tips.

At a glance

For anyone who double-clicks v2rayN and gets no response, sees the window disappear immediately, or can’t launch it after an update. First distinguish a UI crash from a proxy core startup failure, then check the runtime, extraction folder, permissions, and config one at a time. Change only one thing per test, keep the original folder and logs, and compare with a clean folder to pinpoint the cause. Android users can skip to the v2rayNG crash troubleshooting below.

First, identify the problem: app exit or proxy core failure

“Won’t open” can mean three different things: the window is hidden in the notification area, the UI process has actually exited, or the UI is open but the proxy core isn’t running. Only the latter two need troubleshooting, and they require different checks. An invalid subscription URL or unavailable node usually won’t make the desktop app exit before its window appears.

Check the process Note the error Check the runtime Check the folder Isolate the config Restore connectivity

If your browser also loses internet access after the app exits, the system proxy may still point to a local listening port that is no longer running. In Windows 11, go to Settings → Network & internet → Proxy, note the original settings, then turn off the manual proxy enabled by the client for this session. Don’t change a proxy managed by your organization. This restores network access; it doesn’t fix the crash.

.NET runtime: Match the app’s requirements instead of installing at random

v2rayN packages can differ in type, UI implementation, and release method. Windows packages that depend on an external runtime need the framework they specify; self-contained packages include the runtime they need. Don’t assume the installation steps for one major version apply to every package, and don’t treat an installed .NET SDK as proof that the required framework and architecture are present.

  1. Read the error

    Record the framework name, version, and architecture shown in the startup dialog. If the process exits without a prompt, press Win + R, enter eventvwr.msc, then check Windows Logs → Application for “.NET Runtime” or “Application Error” events around the launch time. If there are no such events, continue checking other evidence.

  2. Check the framework declaration

    Look for *.runtimeconfig.json in the extracted folder. Open it read-only in a text editor and check framework or frameworks under runtimeOptions. The framework name and version listed there are more reliable than a guess. Don’t lower the version manually to force the app to start.

  3. Check the architecture

    In Windows, go to Settings → System → About to check the system type, then compare it with the package requirements. x64 and ARM64 aren’t interchangeable. An x64 app that depends on a framework won’t necessarily have everything it needs just because the x86 runtime is installed.

  4. Install and test again

    Get a supported runtime matching the app’s requirements from Microsoft’s official .NET download page. If it requires Microsoft.WindowsDesktop.App, check that you have the Windows Desktop Runtime; the ASP.NET Core Runtime is not a substitute. Restart the app and see whether the error changes.

You can run these read-only commands in PowerShell. The first lists the installed runtimes for the current command architecture; the second reads the runtime config in the current folder. First navigate to the actual extraction folder. If dotnet isn’t found, it may not be installed or its path may not be configured; check the installation records and files as well.

dotnet --list-runtimes
Get-Content -Path .\*.runtimeconfig.json

Folder and permissions: Extract everything, then check for security blocks

Running the app from an archive preview window may extract only some of its files. Extracting a new version over an old folder can also leave mismatched components behind. For troubleshooting, create a new local folder that the current user can write to, such as C:\Users\Public\Documents\v2rayN-test. This is only an example path; confirm that you can actually write to it.

Don’t disable all security protections or exclude an entire drive just to troubleshoot. If an organization policy blocks the app, ask your administrator to review it. Windows reputation warnings, organizational app controls, and antivirus quarantine are different mechanisms. Check the specific message rather than assuming every block is a false positive.

Corrupted config files: Compare with a clean folder you can revert from

Check user data only after the runtime and extraction checks pass. An interrupted update, sync conflict, or unexpected shutdown can make config files or a local database unreadable. Data locations and filenames vary across versions. Don’t follow an old guide that tells you to delete a particular folder, and don’t uninstall before locating your subscription backup.

  1. Exit the process

    Exit v2rayN from the system tray, then use Task Manager to confirm that its process has ended. Don’t move config files while the app is still writing data. If a related core is running, make sure it’s no longer using any files you plan to back up.

  2. Back up your data

    Copy the entire original extracted folder and back up user data from wherever the app actually stores it. Backups may contain subscription links, node credentials, and logs; keep them somewhere only you can access and don’t upload them to public forums.

  3. Create a clean comparison

    Extract the same package in full to a new writable folder. Don’t import subscriptions or copy config files yet; just launch the app. If this version uses a shared user data folder, the new folder may not be isolated. Check the version’s documentation for the data location, or test with a separate Windows account.

  4. Restore settings in stages

    Once the app starts with an empty config, add one subscription group and test it before restoring routing, custom DNS, and other settings. Exit and relaunch after restoring each item. Copying the entire old config at once can bring the problem straight back.

The results are straightforward: if the same package launches in a clean environment, the runtime environment is probably fine, and old data or user-level settings are more likely causes. If it still crashes in a clean environment, keep investigating the runtime, complete file extraction, system compatibility, and security policies. The test folder must remain isolated for this comparison to mean anything.

Use error messages to narrow it down: runtime, file access, or listening port

These are examples of errors you might encounter; wording varies by version. Save the full context, especially file paths, ports, and core output before and after the exception. The words “startup failed” alone usually aren’t enough to choose a fix.

You must install or update .NET to run this application.

Cause: The current process can’t find a compatible .NET framework. Fix: Install the runtime that matches the framework name, version, and architecture in the prompt, then test the same app again.

System.UnauthorizedAccessException: Access to the path

Cause: Access to a file or folder was denied; the full exception identifies the target. Fix: Check read/write permissions for that path and review protection history. Test in a user-writable folder first rather than broadening permissions on a system folder.

System.IO.FileNotFoundException

Cause: A required file or assembly is missing, possibly because extraction was incomplete, the file was quarantined, or versions were mixed. Fix: Check the filename in the exception, extract the package in full to a separate folder, and review security history for that time.

Only one usage of each socket address (protocol/network address/port) is normally permitted.

Cause: Another process is using the address and port the app needs to listen on; this often happens as the core starts. Fix: Identify the process using the port, exit any duplicate instance, or change the listening port after confirming the client’s actual settings.

For example, use the command below to check a port only if the logs clearly identify 10808 as the local listening port. This is an example for troubleshooting, not a claim that it’s the default in every version. Match the PID in the results to the Details tab in Task Manager. Don’t terminate a system process just because you don’t recognize its PID.

netstat -ano | findstr ":10808"

Check the local address’s port and the LISTENING state in the output. Don’t mistake a remote connection using the same port for a local conflict. After changing the port, also check which port the system proxy or any manually configured app is using. A port conflict usually prevents the core from starting; it doesn’t necessarily make the v2rayN main window exit.

v2rayNG crashes: Troubleshoot at the Android app level

v2rayNG is an Android client that uses the Xray core and doesn’t depend on the Windows .NET desktop runtime. v2flyNG uses the v2fly core, so don’t assume their data or core behavior is interchangeable. If the app closes on startup, first check the package architecture, system compatibility, available storage, and app data—not desktop runtime fixes.

Verify the fix: Relaunch first, then restore proxy settings

Getting the window to open is only the first step. Exit and relaunch the client, confirm it can save config, then select a known working node and start the core. Keep the initial test simple: don’t add custom routing, special DNS, or TUN yet. Restore these one at a time afterward to identify which setting triggers the issue.

Installed the runtime but still can’t open v2rayN?

Recheck the framework name and architecture in the error, then compare them with dotnet --list-runtimes. If the missing-runtime message is gone and a new error appears, the failure is happening at a different stage. Troubleshoot the new error instead of reinstalling the same component.

It works when run as administrator. Should I always do that?

First check whether the app is in a protected folder and whether your regular account can write its config. Test again in a writable folder with standard permissions. Check the permission requirements for TUN separately; opening the UI and taking over network traffic are not the same thing.

The app works in a clean folder. Can I keep my old subscriptions?

Keep a backup of the original folder. In the clean environment, add subscription groups one at a time, then update and check the logs. Don’t copy all the old data at once. If the problem returns after adding one item, note the steps and error, remove that item, and test again.

What information should I include when asking for help?

Include the client version in use, package type, OS version and architecture, when the issue occurred, steps to reproduce it, and a sanitized excerpt of the error. Hide subscription links, node addresses, passwords, and user identifiers. Say whether the issue also happens in a clean environment; that’s more useful than a screenshot of a blank window.

Before you finish, check three things: the app launches successfully more than once as a standard user, settings save when you exit, and system networking recovers when the proxy is turned off. For further troubleshooting, see Advanced Setup for core, routing, and DNS checks. Don’t mistake a connection issue for a startup crash.

Download the client and install it here