@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

WindowsでrustupするならVS Codeを終わらせろ

rust 1.58がでたので、rustの環境を更新します。

PS C:\Users\led_l\rust_land\grep-lite> cargo --version
cargo 1.57.0 (b2e52d7ca 2021-10-21)
PS C:\Users\led_l\rust_land\grep-lite> rustc --version
rustc 1.57.0 (f1edd0429 2021-11-29)
PS C:\Users\led_l\rust_land\grep-lite> rustup update
info: syncing channel updates for 'stable-x86_64-pc-windows-msvc'
info: latest update on 2022-01-13, rust version 1.58.0 (02072b482 2022-01-11)
info: downloading component 'rls'
info: downloading component 'rust-src'
info: downloading component 'rust-analysis'
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
 65.2 MiB /  65.2 MiB (100 %)  61.2 MiB/s in  1s ETA:  0s
info: downloading component 'rustfmt'
info: removing previous version of component 'rls'
info: removing previous version of component 'rust-src'
info: removing previous version of component 'rust-analysis'
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-docs'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'rls'
info: installing component 'rust-src'
info: installing component 'rust-analysis'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 18.8 MiB /  18.8 MiB (100 %)   3.9 MiB/s in  4s ETA:  0s
info: installing component 'rust-std'
 22.8 MiB /  22.8 MiB (100 %)  14.3 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 65.2 MiB /  65.2 MiB (100 %)  16.0 MiB/s in  4s ETA:  0s
info: installing component 'rustfmt'
warning: could not delete temp file: C:\Users\led_l\.rustup\tmp\dabwbj53qcrumybx_file
warning: could not delete temp file: C:\Users\led_l\.rustup\tmp\hyd6el0xrjlole4q_file
warning: could not delete temp file: C:\Users\led_l\.rustup\tmp\jtkz8r5o72l3qhu1_file
info: checking for self-updates

  stable-x86_64-pc-windows-msvc updated - rustc 1.58.0 (02072b482 2022-01-11) (from rustc 1.57.0 (f1edd0429 2021-11-29))

info: cleaning up downloads & tmp directories
thread 'main' panicked at 'Unable to clean up C:\Users\led_l\.rustup\tmp: Os { code: 5, kind: PermissionDenied, message: "アクセスが拒否されました。" }', src\utils\utils.rs:642:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
PS C:\Users\led_l\rust_land\grep-lite> rustc --version
rustc 1.58.0 (02072b482 2022-01-11)

更新には成功しました。 warning: could not delete temp file: C:\Users\led_l\.rustup\tmp\dabwbj53qcrumybx_fileと警告が出ています。

f:id:ledsun:20220118050753p:plain
ファイル単体で削除しようとすると同じエラーが起きます。

rust - How to rustup update when permission is denied? - Stack Overflow

It looks like you installed the Rust toolchain using the root account.

なるほど、それらしいことが書かれています。 Windowsの場合どうすれば権限が変えられるのでしょうか? それ以前に、管理者権限でインストールしましたっけ? hello rust - @ledsun blog を見直してみます。

あまり深いことは考えずにWindows向けのRUSTUP-INIT.EXEの64ビット版をダウンロードしてインスートールします。

インストーラーを再度実行してもUACを要求されません。 rustup時もUACを要求されていません。 どうも管理者権限というわけではなさそうです。 次のissueを見つけました。

github.com

So, as a last resort, I shut down VS Code to terminate the RLS process which, to be clear, was running before I updated through rustup. Doing this allowed me to delete all of those temp files.

VS Codeを終了してみると

f:id:ledsun:20220118052113p:plain
ファイルの削除に成功します。

つまり、rustupで更新したいcargoやらrustcやらのファイルのロックを、VS Codeが起動しているrustのLanguage Serverがとっているので削除出来ないということみたいです。 試せていませんが、rustupが成功していても、VS Codeは古いバージョンのrustを動かし続けているのかもしれません。

github.com

現在も議論中です。 現時点では、「WindowsでrustupするならVS Codeを終わらせろ」が正解のようです。