Ответ 1
После спотыкания по аналогичной проблеме, мой опыт заставляет меня поверить, что эта проблема возникает только в Windows 8.x, и, IMHO, это ошибка.
tl; dr: В разделе реестра [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}
добавьте ключи shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}
.
.режим версии файла:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}\shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}]
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}]
- защищенный ключ TrustedInstaller. Используйте свое лучшее мнение.
Вот шаги, которые привели меня туда:
Чтобы начать диагностировать проблему, я написал эту функцию, которая извлекает прикрепленные файлы lnk или, факультативно, цели файлов lnk:
function Get-UserPinnedItems([switch]$Target)
{
$userPinnedPath = "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\Taskbar"
$shellApp = New-Object -ComObject 'Shell.Application'
$items = $shellApp.Namespace($userPinnedPath).Items() | where { $_.IsLink }
if ($Target)
{
return $items | foreach { $_.GetLink.Target }
}
$items
}
Запуск вышеперечисленного с помощью переключателя -Target в Windows 8.1, я верну это:
PS> Get-UserPinnedItems -Target
Application : System.__ComObject
Parent : System.__ComObject
Name : File Explorer
Path : ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}
GetLink :
GetFolder :
IsLink : False
IsFolder : False
IsFileSystem : False
IsBrowsable : False
ModifyDate : 12/30/1899 12:00:00 AM
Size : 0
Type : System Folder
Обратите внимание, что путь ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}
. Это, по-видимому, новый CLSID для File Explorer, для которого доступно очень мало информации. Поиск этого руководства в реестре (или даже в Интернете) не приносит много результатов. В Windows 7 я возвращаю путь к файловой системе "C:\Windows\explorer.exe", поэтому я думаю, что это проблема только с Win8.
Теперь элементы привязки/открепления на панели задач обрабатываются интерфейсом IStartMenuPinnedList, который имеет CLSID {90AA3A4E-1CBA-4233-B8BB- 535773D48449}. Поиск этого руководства в реестре дает несколько результатов. Большинство экземпляров происходит там, где конкретному типу файла нужны функции Pin/Unpin.
Итак, поскольку File Explorer не хватает этой функции, добавление ContextMenuHandler показалось хорошей идее, и, конечно же, это работало как прелесть, по крайней мере для меня. YMMV. Если он не работает для других, возможно, он по крайней мере обеспечит некоторые выводы.
Кроме: OP указывает, что закрепленная папка "Библиотека" является проблемой. Я не думаю, что это абсолютно правильно на основании того факта, что прикрепленный элемент имеет CLSID File Explorer {52205FD8-5DFB-447D-801A-D0B52F2E83E1}, а не CLSID библиотек {031E4825-7B94-4dc3-B131-E946B44C8DD5}.
При запуске Shell:::{031E4825-7B94-4dc3-B131-E946B44C8DD5}
всегда открывается папка "Библиотеки", запуск Shell:::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}
может открыть Библиотеки или эту папку ПК, в зависимости от того, включена ли опция "Показать библиотеки". Исходя из этого, я бы переименовал сообщение, чтобы сказать "Проводник" вместо "Библиотека". Кроме того, я бы сказал, какую ОС я использовал.