概要
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するのが大変だったので、自動化できてよかった。
対症療法で気持ちが悪いので、根本的に解決できたらうれしい。。。