This guide is for first-time v2rayN users on Windows and anyone moving from the WPF interface to Desktop. Check your system architecture and required runtimes first, then extract the app, update your subscription, and configure the system proxy. Finally, use local ports, core logs, and browser requests to troubleshoot issues. Port numbers are examples only; use the values shown in your client and don’t copy node settings.
1. WPF or Desktop: Choose an interface, then check your architecture
v2rayN is a desktop client for managing servers, subscriptions, routing, and local proxy access. The core it launches handles the actual network connection. WPF and Desktop differ mainly in their interface implementation and platform support; they are not different server protocols. Whether a subscription works depends on its server settings, the selected core, and server-side configuration—not the appearance of the app.
Desktop edition
RecommendedFor a first-time setup, start with the Desktop edition and choose the Windows architecture listed on the download page. It uses a cross-platform interface, so controls may be in different places than in classic WPF. If a tutorial screenshot doesn’t match, look for the setting by name rather than matching button positions.
Best for: first-time installs and users who prefer a cross-platform interface.
WPF edition
The classic Windows interface, suited to users who want to keep their existing workflow. WPF is not an edition for older protocols. When switching interfaces, don’t overwrite a program directory that’s still in use. Exit the app and back up your settings first.
Best for: existing WPF users and anyone following tutorials for the classic interface.
In Windows, open Settings → System → About and check System type. Some versions show the last item as About. Most Intel and AMD PCs use x64; for Windows on ARM devices, check the ARM64 package first. The processor brand alone isn’t enough—use the architecture shown by Windows and the download page’s guidance.
- Check the architecture first: x64 and ARM64 packages aren’t interchangeable just because their file sizes are similar. The wrong architecture can prevent the app or core from starting.
- Then check the package contents: Consult the current release notes to see whether runtimes and required cores are included. Don’t infer everything from an abbreviation in the filename.
- Finally, check the system requirements: Older Windows versions may not meet the current app and runtime requirements. Repeatedly downloading the same package won’t fix compatibility issues.
2. Extract and launch: Keep the full directory intact
Go to the client download page and choose the Windows download. If you get an archive, extract all of it before launching. Running the app from an archive preview can leave the core, configuration files, or dependencies in a temporary folder. The window may open, but connections can still fail.
-
Choose a folder
Create a dedicated folder that your user account can write to, such as
D:\Tools\v2rayN. If you don’t have a D: drive, create a folder in your user profile. Avoid system folders that require extra write permissions. -
Extract everything
Extract the entire archive and preserve its folder structure. Don’t pull out just
v2rayN.exe, or mix files from different architectures or interface editions in one folder. -
Launch the app
Run
v2rayN.exe. Administrator permissions are usually unnecessary for standard system proxy use. Leave TUN off during initial setup to avoid extra variables from permissions and virtual network adapters. -
Install required runtimes
If a dialog reports a missing .NET dependency, note the framework name, major version, and architecture, then install the matching runtime as instructed. Restart the client afterward. Installing only the SDK doesn’t guarantee that the required runtime is present.
-
Check the logs
Make sure the main window opens, then check the log area for missing cores, startup failures, or configuration parsing errors. Having no subscription nodes at this stage is normal and doesn’t mean the installation failed.
3. Import a subscription: Saving its URL isn’t the same as updating nodes
A subscription URL usually fetches a set of server configurations. It isn’t your local proxy address and shouldn’t be entered in the Windows Proxy server field. Its token may be tied to your account, so hide the full URL in screenshots, shared logs, and remote support sessions.
- Open Subscription Group Settings in the main window. In some interfaces, it’s under the Subscription Group menu. Select Add, enter a recognizable name and the full subscription URL, then save.
- Open the Subscription Group menu and select Update all subscriptions (without proxy) for the first fetch. Some interfaces omit the parenthetical wording; make sure you choose the option that updates without using the local proxy.
- After the update, check the selected group and search box to make sure nodes aren’t filtered out. Saving a subscription URL doesn’t confirm that the nodes were downloaded.
- Select a node, then choose Set as active server from the right-click menu. Confirm the status bar or active-node indicator changes before testing the proxy.
If your current network can’t reach the subscription server directly but the client already has a working node, activate that node first, then select Update all subscriptions (through proxy). A fresh install with an empty list has no outbound connection to use, so repeatedly trying updates through the proxy won’t help. Ask your subscription provider to confirm the URL is valid and explain how to access it.
4. System proxy and local ports: Get a browser connection working first
Once a node is active, right-click the tray icon and select Set system proxy → Automatically configure system proxy. This tells the client to configure the Windows system proxy; it doesn’t mean every app will use it. A browser is a good first test. Games, command-line tools, and other apps may need separate configuration.
Open Settings → Parameter settings and check the local listening address and port. Depending on the release, you may see one mixed-protocol entry or separate HTTP and SOCKS entries. Don’t assume 10809 from an older tutorial is the current HTTP port. A mixed entry can accept both HTTP and SOCKS requests only if the current core configuration supports it.
Baseline connection test
- Local address
- 127.0.0.1
- Example port
- 10808; use the actual entry shown in your client
- System proxy
- Automatically configure system proxy
- TUN status
- Off
First test a browser that follows the system proxy. Leave virtual network adapters and additional permissions out of the equation for now.
Command-line troubleshooting baseline
- Test entry
- Confirmed HTTP or mixed-protocol entry
- Destination
- https://example.com
- Timeout
- 15 seconds
- What to check
- Command output and core logs from the same test
Specifying a proxy explicitly avoids uncertainty about whether an app reads the system proxy, helping distinguish a local entry issue from a remote connection issue.
If you’ve confirmed that local port 10808 is an HTTP or mixed-protocol entry, run the test below in PowerShell. If you only have a SOCKS entry, use the second command. You don’t need to run both; replace the port with the actual value. The example destination tests the request path only—success with one site doesn’t verify every route.
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -I https://example.com
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -I https://example.com
If the first command returns only 200 Connection established, that means the proxy accepted the tunnel request; it doesn’t confirm that the subsequent TLS handshake or destination request succeeded. Check for a final response or a later error. The second command uses socks5h, which sends the destination hostname to the proxy for resolution and can help narrow down local DNS issues.
5. Routing and cores: Change one setting at a time
The system proxy controls whether an app hands requests to the client. Routing rules determine which outbound connection handles requests that reach the client. These are separate settings. Check the selected profile in the Route selector on the status bar or main window. Enabling the system proxy doesn’t mean every domain will go through a remote node.
- Keep the default route first: Test a destination you know should use the proxy and check the logs for the selected outbound. A page loading while the logs show a direct connection doesn’t prove the remote node works.
- Then check protocol compatibility: VMess and VLESS are protocols; Xray is one core that can handle connections. If you encounter an unsupported field, check the selected core against the node requirements rather than switching cores on the assumption that one will be faster.
- Finally, troubleshoot DNS: If a domain lookup fails, first determine whether the error occurred locally, in the core, or remotely. Replacing the DNS address with an arbitrary public resolver may not fix a routing or subscription access issue.
6. Startup failures and port conflicts: Diagnose by the error
A working main window doesn’t mean the core has started. If the logs show address already in use or a bind failure, check the local listening port. If a file can’t be found, check the extracted folder and security software history. Both issues occur before connecting to the server, so buying a new subscription or switching providers usually won’t help.
| Symptom | Check first | What to do |
|---|---|---|
| Double-clicking opens no window | System tray and runtime | Check whether the app is already running in the notification area, then check the missing framework and architecture shown in the startup dialog. |
| Core file not found | Complete extraction | Check the app’s subfolders and Windows Security protection history for quarantined files. |
| Local port bind failed | Another instance or proxy process | Find the process ID listening on the port. Verify the process before exiting a duplicate instance or changing the local port. |
| Browser loses internet access after exit | System proxy left enabled | Restart the client and select Clear system proxy, or check the manual proxy settings in Windows. |
| Node connection timed out | Remote address and network path | After confirming the local entry works, check that the node is valid, the server port is correct, and the network can reach it. |
For port 10808, check the listening connections in PowerShell; the last column is the process ID. If the output shows process ID 4321, run the second command to find the program name. The ID is an example only—don’t use it to terminate a process on your computer.
netstat -ano -p tcp | findstr ":10808"
tasklist /FI "PID eq 4321"
Check that the Local Address in the output ends with the port and that the state is Listening. Don’t mistake a remote connection entry for a port conflict. If an old v2rayN instance is using the port, exit it normally. If another essential app is using it, choose a free local port in v2rayN’s parameter settings, restart the core, and reapply the system proxy.
7. FAQ: Subscriptions, permissions, and restoring internet access
Why is the node list still empty after a successful subscription update?
Clear the search filter and select the correct group, then check the update log for parsing results. A successful request may only mean that a response was received; it could still be a login page or an expiration notice. Check that the URL has no extra spaces or line breaks and that its token is intact. Don’t post your personal subscription URL in a public forum.
Do I need to run as administrator every time?
Usually not for a standard local proxy or the current user’s system proxy. Features such as TUN may require elevated permissions or a service, depending on the implementation. When troubleshooting for the first time, turn off TUN and test your browser with standard permissions so permission issues don’t get mixed up with node issues.
Why is the app still running after I close the window?
The close button may minimize the app to the system tray, depending on your settings. Expand the Windows notification area, right-click the v2rayN icon, select Clear system proxy, then choose Exit. The app disappearing from the taskbar doesn’t mean its process has ended.
What if I can’t open any websites after closing the client?
Open Windows Settings → Network & Internet → Proxy and check whether Use a proxy server still points to a local port that’s no longer running. On a personal PC, you can clear the leftover setting. If your device is managed by your organization, contact your administrator first; don’t overwrite existing proxy or script settings.
Why does one app bypass the proxy even though websites load?
First check whether the app reads the Windows system proxy. If it supports a separate HTTP or SOCKS proxy, enter the address, port, and entry type that the client is actually listening on. If it doesn’t, consider using TUN. Don’t keep switching subscription nodes just to make one app use the proxy.
8. Upgrade and migration: Back up before replacing files
Before upgrading, clear the system proxy and exit the client. Confirm the old process has ended, then back up your settings and subscription information. Settings may contain node credentials, so store backups somewhere private and under your control—not on a public file-sharing service. Don’t assume every configuration file can be copied directly between WPF and Desktop editions.
- Keep a rollback copy: Back up the old program folder and the actual configuration folder separately. Configuration paths can vary by release method, so check the client’s folder shortcut or the release notes.
- Test in a new folder: Extract the new package to a separate directory, and don’t run two instances at once. Check the startup logs, then import your subscription and confirm an active node.
- Recheck the local entry: Note the listening address, port, system proxy mode, and routing profile before and after the upgrade. Update any external apps where you entered a port manually.
- Restore extra features last: Once a basic browser request works, re-enable custom DNS, routing rules, and TUN one at a time. Test after each change to pinpoint any conflict.
A complete installation check should confirm three things: the client starts its core, the subscription provides selectable nodes, and a real request gets a response through the expected outbound connection. Seeing the main window, a node count, or a single latency test isn’t enough. If something goes wrong later, check in this order: local entry → system proxy → routing → remote connection. This is usually faster than reinstalling from scratch.