Visual Studioを使っていて、フォルダのコンテキストメニュー(右クリックメニュー)に「Open with Visual Studio」が出て邪魔だなと思ったことはありませんか?Visual Studiは起動パスに.vs/を作るのですが、これで差分ができて悲しい思いを何度かしています。
事故らないようにコンテキストメニューから消してみましょう。1
Open with Visual Studioのメニュー実体
コンテキストメニューはレジストリに設定が登録されています。今回はフォルダの右クリックなので鍵になるのはHKEY_CLASSES_ROOT\Directory\Shellです。
含まれるデータは次の通りです。
$ Get-Item "registry::HKEY_CLASSES_ROOT\Directory\Background\shell\AnyCode" Hive: HKEY_CLASSES_ROOT\Directory\Background\shell Name Property ---- -------- AnyCode (default) : @C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\1033\VSLauncherUI.dll,-1002 Icon : C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSLauncher.exe,-105 $ Get-Item "registry::HKEY_CLASSES_ROOT\Directory\shell\AnyCode" Hive: HKEY_CLASSES_ROOT\Directory\shell Name Property ---- -------- AnyCode (default) : @C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\1033\VSLauncherUI.dll,-1002 Icon : C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSLauncher.exe,-105
いろいろな削除方法
regeditで削除する方法と、C#やPowerShellで削除する方法を紹介します。
regeditで削除する
以下の方法でregeditから削除できます。
- regeditを起動
HKEY_CLASSES_ROOT\Directory\Background\shellを開くAnyCodeキーを削除HKEY_CLASSES_ROOT\Directory\shell\を開くAnyCodeキーを削除
C#で削除する
以下のコードを実行すると、AnyCodeキーを削除できます。管理者権限から実行する必要があるので注意です。
// Program.cs (要管理者権限) using Microsoft.Win32; string[] keys = ["Directory\\Shell", "Directory\\Background\\shell"]; foreach (var key in keys) { using var reg = Registry.ClassesRoot.OpenSubKey(key, writable: true); if (reg is not null) { reg.DeleteSubKeyTree("AnyCode", throwOnMissingSubKey: true); } }
PowerShellで削除する
PowerShellからの削除はサブツリー削除に難があるので、C#コードをそのまま持ってくるのが安定です。
# 要管理者権限 $keys = @("Directory\shell", "Directory\Background\shell") foreach ($key in $keys) { $reg = [Microsoft.Win32.Registry]::ClassesRoot.OpenSubKey($key, $true) if ($null -ne $reg) { $reg.DeleteSubKeyTree("AnyCode", $true) } }
削除できない例
PowerShellはレジストリPS Providerからアクセスが可能なので、ネイティブなコマンドレットで削除すると次のようになりますが、肝心のAnyCodeキーのサブキー削除がうまくいかないようです。残念ながら、これ対処がない感じです。
# 要管理者権限 $keys = @("registry::HKEY_CLASSES_ROOT\Directory\shell\AnyCode", "registry::HKEY_CLASSES_ROOT\Directory\Background\shell\AnyCode") foreach ($key in $keys) { if (Test-Path "$key") { foreach ($sub in $(Get-ChildItem "$key").Name) { foreach ($prop in (Get-Item "$key").Property) { echo "Deleting $prop in $key" Remove-ItemProperty "$key" -Name "$prop" } } Remove-Item "$key" -Force -Recurse } }
Line |
9 | Remove-Item "$key" -Force -Recurse
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Cannot delete a subkey tree because the subkey does not exist.
削除後
無事に削除できましたね。
Explorerも再起動不要です。
メニューを戻す
Visual Studio Installerを起動してRepair(修復)を実行すると、コンテキストメニューにOpen with Visual Studioが戻ります。
Repiarの実行後は再起動不要です。
-
私がVisual Studioを起動するときは、
.slnから起動、StreamDeckから起動、タスクバーにピンしたVisual Studioから起動のいずれかを使っています。↩