# win-registry-safety > Windows registry operation safety guidelines for context menu editing. Use when modifying, adding, or deleting registry keys under HKCR (HKEY_CLASSES_ROOT), implementing enable/disable toggles, or working with shell/shellex entries. Triggers on: any code that calls Registry.ClassesRoot, CreateSubKey, DeleteSubKeyTree, or modifies context menu registry paths. - Author: graffetta - Repository: enraku/WinContextMenuEditor - Version: 20260129064144 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/enraku/WinContextMenuEditor - Web: https://mule.run/skillshub/@@enraku/WinContextMenuEditor~win-registry-safety:20260129064144 --- --- name: win-registry-safety description: "Windows registry operation safety guidelines for context menu editing. Use when modifying, adding, or deleting registry keys under HKCR (HKEY_CLASSES_ROOT), implementing enable/disable toggles, or working with shell/shellex entries. Triggers on: any code that calls Registry.ClassesRoot, CreateSubKey, DeleteSubKeyTree, or modifies context menu registry paths." --- # Registry Safety Guidelines ## Critical Rules 1. **Never delete without confirmation** - always show a confirmation dialog before `DeleteSubKeyTree` 2. **ShellEx warnings** - when deleting shellex entries, warn that third-party app functionality may break 3. **Backup before bulk changes** - export to .reg before batch operations 4. **Use writable:true explicitly** - `OpenSubKey(path, writable: true)` - never assume write access 5. **Catch and handle SecurityException** - HKCR writes require admin; gracefully handle permission denied ## Registry Paths | Category | Shell | ShellEx | |---|---|---| | All Files | `*\shell` | `*\shellex\ContextMenuHandlers` | | Directory | `Directory\shell` | `Directory\shellex\ContextMenuHandlers` | | Dir Background | `Directory\Background\shell` | `Directory\Background\shellex\ContextMenuHandlers` | | Desktop Background | `DesktopBackground\shell` | `DesktopBackground\shellex\ContextMenuHandlers` | | Drive | `Drive\shell` | `Drive\shellex\ContextMenuHandlers` | | Extension | `.ext` -> ProgID -> `{ProgID}\shell` | `{ProgID}\shellex\ContextMenuHandlers` | ## Enable/Disable Patterns - **Shell items**: set `LegacyDisable` (REG_SZ, empty) to disable; delete value to enable - **ShellEx items**: rename key with `-` prefix to disable (e.g., `MyHandler` -> `-MyHandler`); preserve default value (CLSID) during rename ## Win11 Classic Menu - CLSID: `{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}` - Force classic: create `HKCU\Software\Classes\CLSID\{...}\InprocServer32` with empty default value - Revert: delete the CLSID subtree under HKCU - Requires Explorer restart to take effect ## Safe Coding Patterns ```csharp // Always use 'using' for registry keys using var key = Registry.ClassesRoot.OpenSubKey(path, writable: true); if (key == null) return; // guard against missing keys // Delete values safely key.DeleteValue("ValueName", throwOnMissingValue: false); // Delete subkeys safely parentKey.DeleteSubKeyTree(keyName, throwOnMissingSubKey: false); ``` For detailed registry path reference, see [references/registry-paths.md](references/registry-paths.md).