WSL2変換時に「必要な機能がインストールされていないため、操作を開始できませんでした。」と出た場合の対処方法

# はじめに
Windows10 may 2020 update(バージョン 2004 (OS ビルド 1904.329))から搭載されたWSL2(windows subsystem for linux 2)を導入した際に、WSL1 -> WSL2 の変換が上手くできなかった事象に対応した内容になります。

Windows10 may 2020 update(バージョン 2004 (OS ビルド 1904.329))が配信されてから、既に致命的な不具合がいくつか[報告](https://docs.microsoft.com/en-us/windows/release-information/status-windows-10-2004)[[日本語版不具合List](https://forest.watch.impress.co.jp/docs/news/1255407.html)]されていますが、updateの目玉としてWSL2が正式に対応しています。

WSL2ではアーキテクチャの変更により劇的にファイルシステムのパフォーマンスが向上しているらしく、ファイルI/O速度がWSL1と比較して最大20倍に速度の向上が見込める事（測った事はないorz）や、LinuxのシステムコールについてもWSL1ではNTカーネル上で実行するための変換層を利用していたのに対し、WSL2では完全なシステムコールの互換が確保されるなど、docker使いには非常に魅力的なUpdateになっています。

本内容は、真っ先にWindows10 may 2020 updateに適用。WSL2(windows subsystem for linux 2)を導入した際に、
WSL1 -> WSL2 の変換が上手くできなかった事象に対応した内容になります。

# 不具合内容
`wsl --set-version` で、WSL2変換時の対処に困る、このエラー....。

＿人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人＿
＞　必要な機能がインストールされていないため、操作を開始できませんでした。　＜
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y　￣

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/0943ad00-5532-48eb-eb9a-87bfff5a8cb5.png)

# 対応方法
Google先生に聞いてみたもの日本語のエラー内容では、なかなか出てこない！
最終的には、
「The operation could not be started because a required feature is not installed」
の文字検索で、解決策が見つかりました（まんまやん）。

- [Failure converting WSL1 distro to WSL2 #4626 - (https://github.com/microsoft/WSL)](https://github.com/microsoft/WSL/issues/4626)
- [The operation could not be started because a required feature is not installed #4951 - (https://github.com/microsoft/WSL)](https://github.com/microsoft/WSL/issues/4951)(こちらは事象は違いますが、原因は同じですね。)


以下に日本語のUIでの対応方法を記載しました。

## Exploit protectionの設定を開く
キーボードの![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/497c65b4-0186-bfd8-9f5d-674978732a30.png)を押して
「`Exploit protection`」と入力して、「Exploit protection」を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/20b7d0a2-b923-1cbc-bafe-545b246c328d.png)

「プログラム設定」タブを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/9ad6a0cf-5a48-62e6-d635-9ce996c81793.png)

「プログラムを追加してカスタマイズ」の左側の![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/71ae92f6-f90a-dd61-ff3a-814dcee1ab0e.png)
をクリック。
「正確なファイル パスを選択してください」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/fe6a3dcb-189f-da40-fa5b-cc80277180ae.png)

## Hyper-Vホストコンピューティングサービス(HCS)[vmcompute.exe]と、仮想マシンワーカープロセス[仮想マシンワーカープロセス.exe]の登録
### Hyper-Vホストコンピューティングサービス(HCS)[vmcompute.exe]の登録
```
C:\WINDOWS\System32\vmcompute.exe
```
をフルパスで設定。
設定画面にて「制御フローガード(CFG)」の「システム設定の上書き」のチェックを外して、「適用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/16845424-e1a6-f340-d8b8-8eb2da2a44c2.png)


### 仮想マシンワーカープロセス[仮想マシンワーカープロセス.exe]の登録
```
C:\WINDOWS\System32\vmwp.exe
```
をフルパスで設定。
設定画面にて「制御フローガード(CFG)」の「システム設定の上書き」のチェックを外して、「適用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/c6750578-2780-a492-22d8-fc30092fcf64.png)

## Hyper-Vホストコンピューティングサービス(HCS)の再起動
PowerShellを管理者権限で開き以下のコマンドを実行させます。
vmcomputeが起動しHyper-Vマシンが正常に動作してくれます。

```
net start vmcompute
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/d37e3794-561b-4459-a4ac-24273d98a0dd.png)


## WSL2への変換
改めて、`wsl --set-version`で変換してみましょう。
今度は、<b>「変換が正常に完了しました。」</b>となり正常に変換が完了するはずです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/d2addf59-abab-2c07-9333-1284584ba40a.png)


# 最後に
自分の他の開発環境PCでは、こんな不具合が発生しなかったので「Windows機能設定間違ってない？」とか、「BIOSのHyper-Vが有効になってない？」とか色々調べたり、Windowsの再起動を繰り返したりで、時間がかかってしまったので、同じ不具合に遭遇した人の解決の時間短縮の資料になれば幸いです。