V2Rayクライアントの起動時クラッシュ対策|.NET ランタイム・セキュリティソフト・フォルダーのアクセス権

v2rayNが起動直後に終了する場合、.NET Desktop Runtimeの不足、セキュリティソフトによるコアファイルの隔離、フォルダーへの書き込み権限が原因として考えられます。原因別の対処法を解説します。

この記事の要点

まず、クライアント本体が終了しているのか、コアの起動に失敗しているのかを切り分け、ランタイム、隔離履歴、書き込み権限を確認します。対象はWindowsデスクトップ版v2rayNです。ダブルクリックしてもウィンドウが表示されない、画面が一瞬で消える、画面は開くがプロキシを起動できない場合に役立ちます。エラー全文と発生時刻を記録しておけば、サブスクリプションやノードの問題をクライアントのクラッシュと誤認しにくくなります。

まず確認:ウィンドウが閉じるのか、コアが起動しないのか

v2rayNはGUIクライアントで、XrayやV2Flyなどのコアがプロキシ接続を処理します。画面のプロセスが終了する問題と、コアの子プロセスが終了する問題は別です。前者はデスクトップ実行環境、後者はコアファイル、生成された設定、待ち受けポートを優先して確認します。ここで説明するWindowsのランタイム手順は、Android版のv2rayNGやv2flyNGには適用できません。

プロセスを確認エラーを記録ランタイムを特定ファイルを確認再度起動

元のフォルダーは削除しないでください。プログラムを完全に終了してから、フォルダー全体を別の場所にコピーしてバックアップします。ユーザーデータを別の場所に保存するバージョンでは、実際のデータ保存先もバックアップしてください。サブスクリプションURL、ノードの認証情報、カスタムルーティングが保存されている場合があるため、プログラム本体だけでは不十分です。

.NET Desktop Runtime:必要なフレームワークとアーキテクチャを確認

外部ランタイムが必要なWindows WPFビルドでは、要件に合った.NET Desktop Runtimeをインストールします。名前の似た.NET RuntimeやASP.NET Core Runtimeとは別のものです。これらだけをインストールしても起動できない場合があります。自己完結型ビルドは通常、別途インストールした.NETに依存しないため、すべての配布パッケージでランタイムの追加が必要とは限りません。

  1. パッケージの種類を確認

    ダウンロードページで選んだものがWPF版か別のデスクトップ版か、自己完結型と明記されているかを確認します。別のビルドに必要なランタイム要件を、使用中のファイルに当てはめないでください。

  2. フレームワーク要件を確認

    フォルダーにv2rayN.runtimeconfig.jsonがある場合は、メモ帳で開き、runtimeOptions.frameworkまたはframeworks内のnameとversionを確認します。ファイルがパッケージに含まれていない場合は、配布パッケージの説明と起動時のメッセージを参照してください。

  3. インストール済み環境を確認

    PowerShellを開き、次のコマンドを実行します。Windowsデスクトップフレームワークが必要なビルドでは、Microsoft.NETCore.Appだけでなく、対応するバージョンのMicrosoft.WindowsDesktop.Appが表示される必要があります。

  4. インストールして再試行

    Microsoft公式の.NETダウンロードページから、メジャーバージョンとアーキテクチャが合ったDesktop Runtimeを入手します。インストール後にクライアントを起動し直してください。再起動を求められた場合は、Windowsを再起動してからもう一度確認します。

dotnet --info
dotnet --list-runtimes

たとえば、設定でMicrosoft.WindowsDesktop.Appの8.0.0が指定されている場合、通常は既定のパッチロールフォワード規則に対応する8.0 Desktop Runtimeで要件を満たせます。これは設定項目の読み方の例であり、すべてのv2rayNが.NET 8を使うという意味ではありません。「より新しいメジャーバージョンをインストール済み」でも要件を満たすとは限りません。エラーを解消するためにruntimeconfig.jsonを安易に編集しないでください。

セキュリティソフトによるブロック:履歴を確認してからファイルを復元

アップデート後に突然起動しなくなった場合や、展開後にコアファイルが見当たらない場合は、まず隔離履歴を確認します。Windows セキュリティでは「ウイルスと脅威の防止」→「保護の履歴」を開きます。発生時刻をもとに項目を探し、影響を受けたファイルのフルパスを確認してください。他のセキュリティソフトを使っている場合も、隔離領域やイベント履歴を同様に調べます。

エラー:The system cannot find the file specified.

原因:プログラムが起動しようとしたファイルがありません。展開が不完全、パスの設定ミス、または隔離が原因の可能性があります。

対処:ログに記録された実際のパスをもとにファイルを確認し、保護の履歴も調べます。入手元が信頼できることを確認したうえで、配布パッケージ全体を新しいテスト用フォルダーに展開してください。

エラー:Access is denied.

原因:アクセス制御やセキュリティポリシーなどにより、対象ファイルの実行または書き込みが拒否されています。このメッセージだけで誤検知と判断することはできません。

対処:ファイルのパスと同時刻のセキュリティ履歴を照合して原因を特定します。組織の管理ポリシーによる場合は、デバイス管理者に相談してください。

リアルタイム保護を全面的に無効にしたり、ダウンロードフォルダー全体やディスクを除外対象にしたりしないでください。隔離ファイルを復元する前に、ダウンロード元、配布パッケージの種類、ファイルパスを確認します。信頼性を確認できないファイルは隔離したままにし、信頼できる配布パッケージを入手し直してください。コアの実行ファイルだけを復元しても、アーカイブ内の関連ファイルが不足していれば解決しない場合があります。

フォルダーのアクセス権:書き込みを確認し、常時の管理者実行は避ける

クライアントはプログラムファイルを読み込むだけでなく、ログ、設定データベース、生成したコア設定を書き込む場合があります。C:\Program Filesや読み取り専用の共有フォルダー、アクセス制御されたフォルダーに置くと、画面が表示された直後に終了することがあります。フォルダー全体の権限をすべてのユーザーに与えるのではなく、まずエラーに記載された具体的なパスを確認してください。

  1. クライアントを完全に終了し、現在のユーザーでテストするためのローカルフォルダーを作成します。例:C:\Users\Public\Downloads\v2rayN-test。この共有フォルダーは一時的な調査にのみ使い、サブスクリプションや認証情報の長期保存には使わないでください。
  2. 信頼できる配布パッケージをテスト用フォルダーにすべて展開し、初回は古い設定をコピーせず、標準ユーザー権限で起動します。
  3. プログラムが実際に書き込むフォルダーで、テキストファイルを新規作成して削除できるか試します。失敗する場合は、右クリックの「プロパティ」→「セキュリティ」で現在のアカウントの権限と、Windows セキュリティのコントロールされたフォルダー アクセスの履歴を確認します。
  4. 一時フォルダーで起動できた場合は、現在のユーザーが書き込める専用フォルダーへ移動し、バックアップを少しずつ戻します。データフォルダーがユーザープロファイル内にあるバージョンでは、その場所のアクセス権も確認してください。

エクスプローラーのフォルダー「読み取り専用」チェックボックスだけでは、フォルダーに書き込めないとは判断できません。確認に役立つのは、ファイル作成テスト、アクセス制御リスト、エラーに表示された対象ファイルのパスです。新しいフォルダーでは動作し、元のフォルダーでは動作しない場合、すぐにノードを変更したりサブスクリプションを作り直したりせず、まず環境の違いを調べてください。

ウィンドウは開くが接続できない:コア、ポート、設定を確認

メイン画面が正常に表示される場合は、「設定」→「パラメーター設定」でローカルの待ち受け設定を確認し、現在のバージョンで利用できるログ表示も確認します。バージョンによってコアやポートの項目が別々のタブにある場合があります。項目名は実際の画面に合わせてください。クライアントの設定項目を、そのままXrayのJSONフィールドとして設定ファイルにコピーしないでください。

10808
待ち受けポートの例。実際の値はローカル設定を確認
1000
よくあるApplication ErrorイベントID
1026
よくある.NET RuntimeイベントID

ログにaddress already in useまたはOnly one usage of each socket addressと表示される場合は、同じアドレスとポートがすでに使用されていないか確認します。以下のコマンドでは10808を例にしています。実際のポートが異なる場合は、パラメーター設定に表示された値に置き換えてください。出力されたプロセスIDはタスクマネージャーの「詳細」で照合し、正体の分からないシステムプロセスを終了しないでください。

Get-NetTCPConnection -LocalPort 10808 -State Listen |
  Select-Object LocalAddress, LocalPort, OwningProcess

証拠を保存:イベント ビューアーとクリーンなフォルダーで比較

ダブルクリックしても何も表示されない場合は、Win + Rを押し、eventvwr.mscと入力して、「Windowsログ」→「アプリケーション」を開きます。記録した発生時刻の前後から、Application Errorや.NET Runtimeなどのイベントを探します。イベントIDは手がかりにすぎません。障害が発生したアプリケーションのパス、モジュール名、例外メッセージも確認してください。

記録する情報内容次の手順
ランタイム不足のメッセージフレームワーク名、必要なバージョン、アーキテクチャ対応するDesktop Runtimeをインストール
UnauthorizedAccessExceptionアクセスを拒否されたファイルまたはフォルダー書き込み権限とセキュリティポリシーを確認
コアファイルのパスが見つからない実際に起動しようとしたプログラムの場所展開したファイルと隔離履歴を確認
新しいフォルダーでは正常、元のフォルダーでは異常同じ種類のパッケージを標準ユーザー権限で比較設定を段階的に戻して差分を特定

新しいフォルダーで正常に起動できたら、まずプログラムを終了し、動作する状態をバックアップしてから、サブスクリプション、ノード、カスタムルールを一つずつ戻します。データの種類ごとに復元するたびに起動して確認してください。復元後に問題が再発すれば、該当する設定またはデータベースに原因を絞り込めます。すべてのサブスクリプションをすぐに削除する必要はありません。サブスクリプションの管理方法はサブスクリプション設定リファレンスを参照してください。

開発者やデバイス管理者に報告する際は、OSのバージョン、クライアントのビルド種類、プロセスのアーキテクチャ、ランタイム一覧、再現時刻、例外のスタックトレースを伝えてください。ログに含まれるサブスクリプションURL、アクセストークン、UUID、パスワード、サーバーアドレスは事前にマスキングします。エラーの種類、モジュール名、必要なパス構造だけを残し、ユーザーデータフォルダー全体をアップロードしないでください。

よくある質問:アップデート、古い設定、起動権限

.NETをインストールしたのに、起動してもすぐ閉じるのはなぜ?

まずDesktop Runtimeがインストールされていることを確認し、プログラムが要求するメジャーバージョンとアーキテクチャを照合します。dotnet --list-runtimesを実行し、対応するMicrosoft.WindowsDesktop.Appが含まれているか確認してください。自己完結型ビルドの場合は、ランタイムを繰り返し追加せず、展開漏れやイベントログを優先して調べます。

アップデート後に起動しない場合、古いフォルダーに上書きしても大丈夫?

まずバックアップを取り、何度も上書きするのは避けてください。新しい配布パッケージを別のフォルダーにすべて展開して起動し、新パッケージ単体で動作することを確認してからデータを戻します。これにより、古い設定との非互換と新パッケージのファイル不足を切り分けられ、元に戻す手がかりも残せます。

管理者として実行したときだけ正常に動きます。このまま使い続けるべき?

まずTUNを無効にし、標準ユーザー権限で画面を起動できるか試します。それでも失敗する場合は、ログに記録されたアクセス拒否のパスを確認してください。常時管理者として実行するより、現在のユーザーが書き込めるフォルダーへ移動するか、該当フォルダーのアクセス権を修正するほうが適切です。

起動後にWebページが開けない場合もクラッシュ?

いいえ。メイン画面とプロセスが正常に動作しているなら、まずコアのログ、待ち受けポート、システムプロキシの状態、ノードへの接続を確認してください。クライアントが終了した後もブラウザーがローカルプロキシを参照している場合は、Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」で手動プロキシの設定を確認します。残ったシステムプロキシ設定を、ネットワーク切断と取り違えないようにしてください。

クライアントをプラットフォーム別にダウンロード