Не удается загрузить расширение пространства имен оболочки в Windows 7 - PullRequest
5 голосов
/ 12 июля 2011

В настоящее время я пытаюсь создать собственное расширение пространства имен оболочки (для представления виртуальной папки, содержащей «подпапки» и «файлы», которые на самом деле представляют данные в иерархической древовидной структуре из удаленного сервиса).

Расширение написано на C #, что, как мне известно, было плохой идеей, но с тех пор, как в .NET 4 появилась возможность сосуществования разных версий среды выполнения .NET в одном и том же процессе, я понял, что это ограничение больше не было проблемой.

До сих пор я добился, чтобы он работал нормально в Windows XP, следуя множеству примеров и ссылок, доступных в Интернете, но когда я пробую это в Windows 7 (я еще не пробовал в Vista, поэтому я не не знаю, будет ли это работать там), расширение не загружено. Согласно моему выводу журнала отладки, он регистрируется нормально, но когда я открываю окно проводника Windows, кажется, что не происходит ни одного из обычных вызовов COM-интерфейсов (обычно начиная с IPersistFolder :: Initialize). На самом деле, даже не вызывается конструктор класса. Я не знаю, запрашиваются ли интерфейсы (успешно или нет), потому что я не уверен, как обнаружить это в .NET, чтобы я мог регистрировать его. Так что, по сути, у меня нет никаких улик, потому что это не удается даже до того, как я получу возможность записать любую полезную информацию о том, что может пойти не так.

Кто-нибудь случайно не понял, в чем проблема? Есть ли какие-то особенности в Windows 7, в отличие от Windows XP, которые необходимо учитывать при работе с расширениями пространства имен оболочки, о которых я должен знать? Если требуется более подробная информация, не стесняйтесь спрашивать (я старался быть кратким, потому что я уверен, что никто не оценит, что я скопировал и вставил весь мой код здесь, и я не мог сократить его только до соответствующих частей, потому что я просто не знаю, какие это ...)

Ответы [ 3 ]

4 голосов
/ 20 декабря 2012

У меня был очень похожий случай:

  • Я увидел расширение моей оболочки в нужном месте (в моем случае «Мой компьютер»), значок и все.
  • Тем не менее, в моем COM-классе не было выполнено создание экземпляра (я проверил монитор процесса) и не было вызова IPersistFolder :: Initialize.

Я использовал ATL и 64-битную версию, поэтому я знал, что .NET не была моей проблемой.

Оказывается, проблема в том, что у меня не было следующего значения в реестре: [HKEY_CLASSES_ROOT \ CLSID \ {ваш CLSID} \ ShellFolder] "Атрибуты" = DWORD: 20000000

(Недостаточно, чтобы существовал ключ или значение - вам нужно иметь (как минимум) это конкретное значение атрибута, чтобы что-то начать).

После добавления вам нужно убить все процессы explorer.exe и снова запустить один (например, с помощью диспетчера задач). Я надеюсь, что это решит и вашу проблему.

0 голосов
/ 14 августа 2018

Спасибо @Oren, для меня проблема заключалась в том, что мне нужно было удалить все остальные версии в следующей записи regedit: HKEY_CLASSES_ROOT \ CLSID {ваш CLSID} \ InprocServer32 \

Я только оставил текущую версию. Я думаю, проблема заключалась в том, что у меня был номер версии, который был выше, чем моя текущая версия.

Добавить; Я должен был сделать то же самое и больше к другому компьютеру, у которого была похожая проблема. Я удалил все остальные версии из HKEY_LOCAL_MACHINE \ SOFTWARE \ CLASSES \ CLSID {ваш CLSID} \ InprocServer32 \

0 голосов
/ 14 июля 2011

Это может быть связано со следующими причинами:

  1. Есть ли в вашем пространстве имен зависимости, которые могут не загружаться?

  2. Регистрация прошла успешно? Вы действительно проверили реестр, если правильные записи созданы? Помните, что если UAC включен, вам могут потребоваться повышенные привилегии.


В качестве альтернативы самостоятельной разработке таких сложных зверей рассмотрите возможность использования EZNamespaceExtensions - это очень просто, и вы можете сосредоточиться на предоставлении своих специфических для nse функций.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мы являемся разработчиками EZNamespaceExtensions.

...