v2rayN for Windows: Complete Installation and Setup Guide — Desktop vs. WPF, Common Pitfalls Explained

A step-by-step guide from preparing the runtime to first launch, covering Desktop vs. WPF, extraction paths and permissions, and fixes for common issues such as the system proxy not working.

At a glance

Ideal for anyone configuring v2rayN on Windows for the first time or troubleshooting launch failures, core startup errors, or loss of connectivity after importing a subscription. Follow the sequence from version selection and extraction to core and subscription setup, proxy verification, and fault isolation to create a desktop configuration you can verify later.

Know the difference between Desktop, WPF, and packaging before installing

“Desktop” and “WPF” in the download list mainly describe the UI technology and interaction model; they do not refer to the proxy protocol or core. Both can manage VMess and VLESS configurations. Support for a specific protocol depends on the selected core and node parameters, not the interface label. If you only use Windows and prefer traditional menus and window controls, WPF may be the better choice. Choose Desktop if you want the newer desktop interface and a consistent experience in future releases.

Also evaluate the interface version separately from the runtime packaging. A filename containing SelfContained usually means the runtime is bundled with the application. The archive is larger, but this is useful on PCs without the required .NET runtime installed. Smaller packages may require the matching .NET Desktop Runtime before first launch. Naming can change between releases, so follow the download description rather than guessing from archive size.

The processor architecture must also match. Most Windows 10 and Windows 11 desktops and laptops use the x64 package; devices with ARM64 processors should use the arm64 package. Open “Settings” → “System” → “About” and check “System type.” Choose x64 for “x64-based processor” and arm64 for “ARM-based processor.”

Choose in this order: system architecture, then runtime

Desktop
  • For users who prefer the newer desktop interface
  • Confirm the x64 or arm64 architecture first
  • Follow the runtime requirements in the download description
  • Manage nodes and subscription data in the application
WPF
  • For users who prefer traditional Windows window controls
  • The smaller package may require the .NET Desktop Runtime
  • Protocol support depends on the selected core
  • The system proxy still must be enabled and verified separately

If you cannot confirm which runtime is installed, choose a download that matches your processor architecture and clearly includes the runtime. Consider the smaller package only when the required runtime is already installed.

22H2
Windows 10 baseline
24H2
Windows 11 baseline
10808
SOCKS example port in this guide
10809
HTTP example port in this guide

Correct extraction and first-launch procedure

Keep v2rayN’s application directory intact for long-term use; do not drag the main executable out of the archive and run it by itself. The main program, core files, configuration directory, and dependencies must remain in their original relative locations. Create a fixed directory such as D:\Tools\v2rayN, then extract the entire archive there. Do not keep it in the browser’s temporary download folder or launch it from an archive preview window.

Directory permissions directly affect configuration saves and core updates. After placing the program in C:\Program Files, a standard account may be unable to write certain files. Deep desktop paths, synced folders, or locations subject to special permission policies can also cause files to remain locked after an update. A short fixed path in English is easier to troubleshoot, such as D:\Apps\v2rayN. Chinese characters are allowed, but if launch problems occur, retest from an English path first.

  1. Confirm the architecture

    Open “Settings” → “System” → “About,” then choose the x64 or arm64 download that matches the system type. Do not mix programs and cores built for different architectures.

  2. Extract the entire archive

    Extract the complete archive to a fixed directory such as D:\Apps\v2rayN, and confirm that the main program, core directory, and other files are all present.

  3. Launch the application

    Double-click the main program and check the notification area. The application may continue running in the background after the main window closes; reopen it from the tray icon.

  4. Choose a core

    Go to “Settings” → “Parameters” → “Core type” and select a core supported by the configuration. VLESS and Reality configurations typically use the Xray core.

  5. Import a configuration

    Import a single link from the clipboard, or add a subscription URL under subscription groups. After the update finishes, select a configuration and set it as the active server.

  6. Enable the proxy

    Choose Set system proxy from the tray menu, then use a browser to visit the target site for verification. When testing is complete, clear the system proxy from the same menu.

How to configure subscriptions, the active profile, and core parameters

A successful launch does not mean the proxy is ready. At minimum, three things are required: import a valid configuration, set one configuration as the active server, and start a core compatible with that configuration. A subscription is only a way to deliver node parameters in bulk. A successful update means the client received the data; it does not prove that every configuration can connect.

When adding a subscription, open subscription group management, create a group, paste the complete URL, and then update all subscriptions. Leading or trailing spaces, partially copied parameters, and expired credentials can all cause an update to fail. If you received a single vmess:// or vless:// link, use Import from clipboard instead of mistakenly entering it in the subscription URL field.

After importing, check the address, port, transport, TLS, SNI, Host, path, and Flow. Common key fields for VLESS + Reality include the destination address, port, public key, Short ID, Server Name, fingerprint, and the xtls-rprx-vision Flow. For VMess + WebSocket + TLS, pay particular attention to Host, path, and the TLS toggle. If any field was truncated, the core may start successfully but connections can still time out.

VLESS + Reality

Core
Xray
Transport
TCP
Flow
xtls-rprx-vision
Security type
Reality
Fields to verify
Public key, Short ID, Server Name

These are usually filled automatically when a subscription imports correctly. For manual entry, compare every field with the original parameters supplied by the configuration provider.

VMess + WS + TLS

Core
Xray or v2fly
Transport
WebSocket
TLS
Enabled
Fields to verify
Host, path, port
User ID
Full UUID

The path usually starts with a slash. Host and the node address are not necessarily the same, so do not overwrite the subscription value based on the domain name.

Troubleshooting order when the system proxy is enabled but browsing still fails

The system proxy and the core process are separate layers. The system proxy sends traffic from applications that support Windows proxy settings to a local port, while the core receives that traffic and forwards it to the active server. If the system proxy is enabled but the core is not listening, connections are refused. If the core is running but the system proxy is disabled, only applications with a manually configured proxy will use it.

This guide uses SOCKS 127.0.0.1:10808 and HTTP 127.0.0.1:10809 as troubleshooting examples; defaults can differ between versions. Read the actual ports in v2rayN’s local listening settings, then check that the Windows proxy page or application proxy parameters match. After changing a listening port, manually configured applications will not all update their old system proxy address automatically.

Start by checking the main-window logs. “address already in use” means another process has taken the port. A configuration parsing error means you should recheck the node parameters. If the core starts normally but the remote connection times out, check the server address, port, system clock, and network environment. Do not reinstall repeatedly at the outset; the logs usually narrow the problem to local listening, configuration parsing, or remote connectivity.

netstat -ano | findstr :10808
tasklist /fi "PID eq process ID"
powershell -Command "Test-NetConnection 127.0.0.1 -Port 10808"

The first command confirms whether 10808 is in LISTENING state and reads its PID; the second maps the PID to a process name; the third checks whether a local TCP port can accept a connection. If nothing is listening, restart the core and review the logs. If the listening process is not the core used by v2rayN, exit the conflicting program or change the local port under Parameters, then update the system proxy accordingly.

Why is there no main window after launch?

Expand the notification area and look for the v2rayN tray icon. The main window may be closed while the background process is still running; double-click the icon or use the tray menu to show it again.

The system proxy is enabled, but why does the browser still fail to connect?

Check that an active server is selected, then confirm in the logs that the core started successfully. Next, verify that the current Windows proxy address matches v2rayN’s actual HTTP listening port.

The subscription updated successfully, so why do all nodes time out?

First correct the Windows date, time, and time zone, then spot-check one configuration’s address, port, TLS, SNI, and transport settings. When every node times out, check shared parameters and the local network before deleting nodes one by one.

What should I do if port 10808 is already in use at launch?

Run netstat -ano | findstr :10808 to obtain the PID. After identifying the process using the port, close it, or choose an unused port in v2rayN’s local listening settings and update any proxy settings that depend on it.

Why does double-clicking the program do nothing after an update?

Confirm that the new archive was extracted completely and that the new main program was not placed over an incomplete old directory. If a runtime component is missing, install the .NET Desktop Runtime required by the download, or use the matching architecture package that includes the runtime.

Common installation pitfalls: paths, blocking, system time, and old configuration

Incomplete extraction is a common cause of first-launch failures. Some users copy only the main program and omit the core and dependency directories; others run the program directly inside the archive, causing temporary files to disappear when the archive tool closes. The correct approach is to create a new empty directory, extract the entire archive, and launch from that directory. During troubleshooting, do not keep multiple background instances running, or the tray menu and main window may belong to different processes.

If Windows displays a source warning for a download, open the archive or program file’s Properties and check whether an Unblock option is available, then review the file source before proceeding. When security software quarantines core files, the main interface may still launch but no local port appears after you click Connect. Check the quarantine history and v2rayN logs to identify the affected file, then obtain the complete package again from a trusted download source.

An incorrect system clock can affect TLS and Reality connections. Go to “Settings” → “Time & language” → “Date & time,” enable automatic time and automatic time zone, then click Sync now. When the clock is off by several minutes, the usual symptoms are not an application crash but failed node handshakes, connections closing early, or simultaneous timeouts across all TLS configurations.

Overwriting an old version in place can also leave incompatible configuration behind. Before upgrading, exit v2rayN from the tray, back up the configuration, and extract the new version to a separate directory for testing. After confirming that the subscription, core, and system proxy work correctly, migrate only the data you need. Do not let old and new executables share a configuration directory that is being written to.

Symptom Check first Action
The main program does not launch at all Architecture, runtime, extraction completeness Confirm x64 or arm64, install the matching runtime, and extract the archive again in full
The main interface works, but the core fails Core files, core type, logs Go to “Settings” → “Parameters” → “Core type,” select it again, and restart the core
The browser reports a proxy connection failure Local listening port Check 127.0.0.1 and the actual HTTP port; rule out a port conflict
All TLS configurations time out Date, time, and time zone Enable automatic time synchronization and sync now, then restart the core and test again
Configuration problems after an update Old files overwritten and parallel instances Exit every instance, verify the new version in a separate directory, then migrate the data

Post-setup verification checklist

Do not rely only on the tray icon color or the main interface status. Check four layers in order: core process, local port, system proxy, and target access. First confirm that the logs show no continuing errors, then verify that the local port is listening, check the Windows proxy address, and finally visit a site that requires the proxy in a browser. If any layer fails, fix that layer before changing anything else.

Also test what happens after clearing the system proxy. Before exiting v2rayN, clear the system proxy from the tray menu and check whether the Windows proxy page has reverted. If an abnormal exit leaves an old proxy address behind, the browser will keep trying to connect to a closed local port and all websites may suddenly become unreachable. Disable the Windows manual proxy to restore a direct connection.

  1. The main interface clearly shows an active configuration selected, and its note matches the expected node.
  2. The core log shows that the configuration loaded successfully, with no port conflict or field-parsing error.
  3. Test-NetConnection 127.0.0.1 -Port 10808 returns that the local port is reachable, or test the actual listening port.
  4. The address in the Windows system proxy matches v2rayN’s HTTP listening setting.
  5. The browser can access the target site with the proxy enabled and returns to its original direct-connection behavior after the proxy is cleared.
  6. After restarting v2rayN, the subscription group, active configuration, and core selection are still read correctly.
Get the GUI client Choose v2rayN or v2rayNG for your platform