Учебник по расширению оболочки Windows не добавит CLSID в реестр

контекст & Что я сделал

Я пытаюсь научиться писать расширения оболочки для Windows, однако этот процесс не очень хорошо документирован и информации для начинающих очень мало. Из того, что я прочитал, этот Руководство опубликовано повсеместно как один из лучших учебников для начинающих по расширениям оболочки Windows. Я до конца следовал этому уроку, но мне пришлось внести некоторые коррективы, чтобы избежать некоторых конфликтов:

  1. Мне пришлось изменить Visual Studio 2012 для сборки для x86-64bit. Все, что я сделал, это переключил конфигурацию с win32 в x64, но может быть больше шагов, о которых я не знаю.
  2. я использовал guidgen.exe, который поставляется с Visual Studio 2012, чтобы сгенерировать GUID для меня.

Мой проект успешно компилируется, и я могу запустить его, завершив explorer.exe (Ctrl + Shift + правый клик в меню Пуск, выберите Exit Explorer) и компиляция / запуск моего проекта в режиме выпуска (который затем запускает другой экземпляр explorer.exe).

проблема

Проблема в том, что значение CLSID не записывается в regedit.exe при выполнении программы (хотя txtfile местоположение реестра обновляется). Кроме того, ни одна из программных ловушек не работает, что и следовало ожидать, если CLSID не регистрируется. Я бы хотел немного сузить проблему, а не просто сказать: «Помогите, это не работает!» но я, честно говоря, понятия не имею, что я могу сделать, чтобы еще более точно определить проблему. Я почти уверен, что что-то не так с моим SimpleShlExt.rgs файла, однако в руководстве не содержится большой информации об этом важном этапе, касающемся *.rgs файл (кроме какого-то не по теме шутка)

  1. Как я могу получить больше информации о том, что происходит неправильно при регистрации моей DLL в реестре?
  2. Существуют ли какие-либо предостережения для Visual Studio 2012, которые не описаны в руководстве (из-за возраста учебника или отсутствия у него подразумеваемых знаний).
  3. Что не так с моим SimpleShlExt.rgs файл?!?!?

Код

Для дополнительной информации я разместил соответствующий код ниже. это около идентичен руководству, указанному выше (но имеет другой GUID). Я могу опубликовать свой SimpleShlExt.cpp а также SimpleShlExt.h однако по запросу оно в значительной степени идентично руководству, и я не уверен, что оно добавляет какую-либо полезную информацию.

SimpleShlExt.rgs (CLSID был создан с guidgen.exe)

HKCR
{
NoRemove CLSID
{
ForceRemove {E2D6660C-E3E5-43CE-BF24-44D4269EEC1C} = s 'SimpleShlExt Class'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
HKCR
{
NoRemove txtfile
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove SimpleShlExt = s '{E2D6660C-E3E5-43CE-BF24-44D4269EEC1C}'
}
}
}
}

1

Решение

Это было очень давно, но я только что понял, что оставил это повешение. Я вернулся к использованию CLSID примера, и он работал просто отлично. Я нашел несколько других файлов, которые определяют CLSID, которые затем не совпадали с теми, которые я генерировал с guidgen.exe, Например, учебник на самом деле не упоминает SimpleExt.h который также имеет информацию CLSID, зарегистрированную в нем. Чтобы изменить CLSID, вам нужно найти все точки, в которых он отображается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]