WSL2のUbuntuでVSCodeを開こうとしたら以下のエラーが出て開けなかったので対処法を書いておく。

$ code .
/mnt/c/Program Files/Microsoft VS Code/Code.exe: Exec format error

原因

この現象はsystemdを有効にしてる場合だけ発生するので無効にすれば発生しない。

/etc/wsl.conf
[boot]
- systemd=true
+ systemd=false

ただsystemdを無効にするとsnapが使えなかったり色々と不便なので他の対策が欲しい。

対策

GithubのIssueにその場しのぎの対処法としてWSLInterop.confに記述する方法があったのでそれを採用した。ただsystemdがこれを無効化してたということはなにかsystemd側で変な挙動が起きるんじゃないかとちょっと不安だ。

sudo sh -c 'echo :WSLInterop:M::MZ::/init:PF > /usr/lib/binfmt.d/WSLInterop.conf'

参考

https://github.com/microsoft/WSL/issues/8843#issuecomment-1459120198