This guide covers v2rayN's main window failing to start on Windows. First, distinguish between an app running in the system tray, a desktop app crash, and a core startup failure. Then use Event Viewer and runtime settings to find the cause. Work through the checks in order: preserve the current state, verify the package and runtime, check folder permissions, and isolate old configuration. There's no need to start by changing nodes, subscriptions, or routing rules.
First, check whether the window is hidden or the process has exited
No window after a double-click doesn't necessarily mean the app crashed. v2rayN can run in the system tray, and an existing instance may prevent another from opening. Press Ctrl + Shift + Esc to open Task Manager. Under Details, look for v2rayN.exe, and check the hidden icons at the right end of the taskbar. If the tray icon is there, try restoring the main window from the tray. Avoid repeated double-clicks, which can launch more instances.
| Symptom | Check first | Next step |
|---|---|---|
| Process is running, but the window is missing | System tray, existing instance, window position | Try restoring the window; if needed, exit and reopen the app |
| Process appears, then disappears | Runtime, crash logs, configuration loading | Note the exit time and open Event Viewer |
| Main window works, but the core reports an error | Core files, port conflicts, generated configuration | Check the client's log at the bottom; don't reinstall the desktop runtime yet |
| Windows displays a blocking warning | File source, security history, organizational policies | Verify the package source and check the specific reason for the block |
The desktop interface and cores such as Xray and V2Ray are separate processes. If the main window opens but the log reports a port binding error, follow a different troubleshooting path. Conversely, switching between VMess, VLESS, or Trojan nodes usually won't fix a startup crash before the main app has finished initializing.
Preserve the evidence: find the error in Event Viewer
Start with one test launch and note the time. Windows event logs are more useful for diagnosing the issue than “nothing happens when I click.” Press Win + R, enter eventvwr.msc, then go to Windows Logs → Application and look for an entry that matches the launch time.
-
Note the time
Double-click the app once and note your local time. Wait about 10 seconds, then check Task Manager to see whether the process is still running or has exited.
-
Filter events
Go to Windows Logs → Application → Filter Current Log and select Error. Look for entries from .NET Runtime or Application Error.
-
Verify the process
Open the event's General tab and confirm that v2rayN is the faulting application. Event IDs 1026 and 1000 are common clues, but the ID alone doesn't identify the root cause.
-
Save the evidence
Note the exception type, faulting module, application path, and any file paths involved. Before sharing, redact your username, subscription URL, server address, and authentication parameters.
-
Keep the old folder
Exit the app and related cores, then copy the entire existing app folder as a backup. If the logs point to a separate user data folder, back that up too. Don't overwrite or delete the old configuration.
If the app folder contains a log directory such as guiLogs, check the newest files by modification time. Names and locations may vary by version and package. No app log doesn't mean there was no crash: the error may occur before logging initializes. In that case, start with Windows event logs.
.NET runtime: install what the package requires
Requirements can vary between v2rayN versions and desktop builds. Packages that rely on an external runtime are different from self-contained packages. Don't follow older guides that recommend a specific .NET major version without checking. First review the current package notes, then look for v2rayN.runtimeconfig.json in the app folder. If present, check the name and version under framework or frameworks.
You must install or update .NET to run this application.
Cause: The startup host couldn't find a runtime that meets the app's requirements. Fix: Install the required dependencies for the specified Framework, Architecture, and version, then fully exit and restart the app.
BadImageFormatException
Cause: An assembly or native component may be damaged or built for a different architecture. Fix: Verify the system and package architectures, and check the file named in the exception. Compare against a complete, fresh app folder.
If the requirement lists Microsoft.WindowsDesktop.App, you typically need the .NET Desktop Runtime for the matching architecture. The standard .NET Runtime and ASP.NET Core Runtime aren't substitutes. If it lists Microsoft.NETCore.App, follow that build's requirements; a graphical interface alone doesn't mean the Windows Desktop Runtime is required.
# Open PowerShell in the extracted v2rayN folder
Get-Content .\v2rayN.runtimeconfig.json
# List the runtimes visible to the dotnet host used by this command
dotnet --list-runtimes
# Check this dotnet host's environment and architecture
dotnet --info
- Check the architecture: In Windows Settings, go to System → About and check System type. Don't assume x64 and ARM64 packages are interchangeable just because their filenames look similar.
- Check the major version: Installing a newer major version doesn't guarantee that an older major-version dependency is satisfied. Cross-version roll-forward depends on the app's runtime configuration.
- Don't confuse the SDK with the runtime: Running an app usually doesn't require the full SDK. Installing developer tools isn't a necessary fix for a missing runtime.
- Understand what the command tells you: If
dotnetisn't recognized, the host may not be installed or its location may be missing from PATH. That alone doesn't prove a self-contained package can't run.
Folder permissions: extract the full package and test writes
Running the app from an archive preview may extract only the main executable, leaving out dependencies. Repeatedly overwriting an old folder can also leave mismatched components behind. Extract the complete package to a local folder your account can write to, such as Apps\v2rayN-test under your user directory. Keep the new and old files separate.
UnauthorizedAccessException
Cause: You may not have permission to access the target file or folder, or the location may be protected. Fix: Check the full path in the exception, test in a folder your account can write to, and review your security software's block history.
The process cannot access the file because it is being used by another process.
Cause: Another process has the file open. Fix: Close duplicate instances and old cores, pause sync activity on the folder, and try again. Don't replace configuration while the app is running.
- Create and delete a text file in the target folder to test basic write access. Passing this test doesn't guarantee that every subfolder is writable, so still check the path named in the exception.
- Open Windows Security → Virus & threat protection → Protection history and check for a block at the relevant time. Turning off all protection is not a standard troubleshooting step.
- If Controlled folder access is enabled, check which app path was blocked. Grant a specific exception only after verifying the file's source and purpose.
- Don't launch multiple copies from a sync drive, network share, and local folder at the same time. For troubleshooting, use one clearly identified test folder.
Corrupt configuration: compare with a clean folder
Prioritize local state only if the exception mentions JsonException, a database read error, or configuration deserialization failure. A sudden power loss, forced shutdown, or switching between versions can all cause configuration loading to fail. A node connection failure alone doesn't mean the client configuration is corrupt.
- Close existing instances. Exit from the system tray. If the window isn't available, confirm in Task Manager that all related processes have stopped.
- Keep an original backup. Copy the existing app folder and the user data folder in use. Backups may contain credentials, so store them somewhere secure.
- Create a new folder. Extract a complete package from the same source to a new location. For the first test, don't copy old configuration, subscription databases, or custom routing rules.
- Compare the results. If the new folder starts, old files or configuration are more likely to be the cause. If it still exits, check the runtime, Windows events, and security blocks.
- Restore items one at a time. Start with the subscription you need, then restore routing, DNS, and other settings. Exit and reopen after each change to identify what triggers the issue.
Some builds store data in the user folder, so changing the app folder may still load the same configuration. If the new folder behaves the same way, confirm the data location from the logs or version notes. Only rename the relevant configuration folder after backing it up and closing the app; don't delete the entire user configuration tree. Older versions may not be able to read data written by newer versions, so restore a pre-upgrade backup if you roll back.
Main window restored: check the core and proxy settings next
Once the main window opens reliably, move on to the network layer. Desktop app dependencies, core dependencies, and routing configuration are separate issues. Leave TUN off, confirm the core starts, then enable the system proxy and restore your previous settings one at a time to pinpoint what causes a problem.
| Check | What to do | What to keep in mind |
|---|---|---|
| Listening port | In Settings → Parameter settings, check the local listening port. Use the field shown in your current version. | Don't assume every version uses the same port |
| Port conflicts | If the configured port is 10808, run the command below to find the PID | A listening port isn't necessarily a problem; confirm it belongs to the expected core |
| System proxy | Check Windows Settings → Network & internet → Proxy | The destination address and port should match the current client listener |
| TUN mode | Enable it after the basic proxy works, then check permissions and core logs | Troubleshoot virtual adapter errors separately from a missing desktop runtime |
# Use only if your local listening port is set to 10808
netstat -ano | findstr ":10808"
# In Task Manager's Details tab, match the process using the PID in the last column
If your browser can't open webpages after v2rayN exits unexpectedly, Windows may still be using a manual proxy that points to your computer, while the local listener has stopped. Note the current settings, then check the Windows proxy page and disable the inactive manual proxy. Don't change settings managed by your organization. Restoring network access doesn't fix the crash; still verify that the app and core can exit and start again.
Common questions: reinstalling, administrator access, and restoring subscriptions
Why does it still say a runtime is missing after I've installed .NET?
Compare the framework name, version, and architecture in the startup message again. The standard Runtime and Desktop Runtime differ, as do x64 and ARM64. Use dotnet --list-runtimes to help check, and make sure you know which architecture of the host is running the command.
If it opens as administrator, should I always run it that way?
Check the path mentioned in the exception, extract the complete package to a folder your account can write to, and try launching normally. If elevation is needed only for TUN, handle that permission separately from the main window's file access.
If deleting the configuration fixes it, can I get my subscription back?
First, save the subscription URL and any required parameters from your backup, then add them to the new configuration. Don't immediately overwrite it with the entire old database, which could bring the problem back. If you don't have a backup, keep the old folder before attempting further recovery.
Reinstalling hasn't helped. What information should I provide?
Include your Windows version and architecture, package type, installed runtimes, the exact time of the failure, and the exception type and faulting module from Event Viewer. Whether a clean folder starts is more useful for diagnosis than simply saying “the latest version still crashes.”
For a final check, confirm three things: the main window opens without administrator privileges, the app starts again after you exit, and the logs show no repeated startup errors with the required features enabled. Fix the client startup path before restoring subscriptions, DNS, and routing rules. This avoids unrelated changes and makes it easier to spot problems introduced by a future upgrade.