概要

WSLを起動しようとした際、以下のエラーで失敗してしまう。

スタブは正しくないデータを受信しました。
Error code: Wsl/Service/0x800706f7
Press any key to continue...

以上を対処してWSLを起動できたため、手順を記載する。

結論

根本的な解決方法は見つかっていないらしい。

しかし、PowerShell(管理者権限)で以下のコマンドを実行することで一時的に解消できた。
(ただし、再起動すると元に戻ってしまう。。。)

netsh winsock reset

※参考:https://memo.laughk.org/articles/2023-03-13-workaround-for-error-code-that-wsl-service-0x800706f7/

対処

前提(見直し)

仮想環境の利用設定が正常か確認する。
※参考:https://celeron1ghz.hatenablog.com/entry/2023/09/28/181933

  • BIOS
    • 仮想化支援技術がオンであるかをチェック
  • タスクマネージャー→パフォーマンス→CPU
    • 仮想化が「有効」であるかをチェック
  • コントロールパネル→Windows の機能の有効化または無効化
    • 二つのチェックがオンになっているかをチェック
    • 仮想マシンプラットフォーム
    • Windows ハイパーバイザー プラットフォーム

以上を確認しても解決しない場合、以下の対症療法を実施する。

対症療法

PowerShellを管理者権限で起動し、以下のコマンドを実行する。

netsh winsock reset

実行後、WSLを起動できたらOK。
※再起動すると元に戻ってしまうため注意。

おまけ:「winsock reset」の自動化

起動するたびにコマンドを実行するのが手間なので、自動化した方法を記載する。

ps1ファイルを作成

以下の通り、Reset-Winsock.ps1を作成する。
(今回は、Cドライブ直下に作成する。)

# Reset-Winsock.ps1

# Check if the script is running with administrative privileges
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "Please run this script as an administrator."
    exit
}

# Execute netsh winsock reset
Write-Host "Resetting Winsock..."
netsh winsock reset

Write-Host "Winsock reset completed."

管理者権限でReset-Winsock.ps1を実行し、正常に動作することを確認する。

powershell -Command "C:\Reset-Winsock.ps1"

スケジューラーの設定

ログオン時、Reset-Winsock.ps1を実行するよう設定する。

Win+rで「ファイル名を実行」を開く。
「taskschd.msc」と入力しOKを押下する。

タスクスケジューラより、タスクの作成を押下する。

タスクの作成ダイアログで、以下のように設定する。

  • 全般
    • 名前:WinSocketReset
    • セキュリティオプション:
      • 「ユーザーがログオンしている時のみ実行する」を選択。
      • 「最上位の特権で実行する」を選択。
  • トリガー
    • 指定のユーザーでログオン時
  • 操作
    • プログラムの開始
      • プログラム/スクリプト:PowerShellのパス
      • 引数の追加:-Command "C:\Reset-Winsock.ps1"

※参考:
https://www.pc-gear.com/post/startup-admin/
https://techmania.jp/blog/windows0002/

確認

再起動し、WSLが起動できることを確認する。

後書き

再起動の度にwinsock resetするのが大変だったので、自動化できてよかった。
対症療法で気持ちが悪いので、根本的に解決できたらうれしい。。。