Написание расширений оболочки на Python и компиляция

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

Моя проблема заключается в том, что я пытаюсь скомпилировать код Python в исполняемый файл с помощью cx_Freeze или py2exe. Он создает исполняемый файл, и запуск исполняемого файла создает запись в реестре, но при щелчке правой кнопкой мыши после перезапуска explorer.exe меню не отображается.

Я думал, что cx_Freeze или py2exe смогут зарегистрировать контекстное меню или оверлей и заставить его общаться с кодом внутри exe. Мне нужно сделать файл dll? Я не очень хорошо знаком с com-серверами, поэтому любой, у кого есть опыт работы с расширениями оболочки, был бы очень признателен.

У меня есть более подробная информация, если требуется / необходимо.


person Kyle K    schedule 27.06.2014    source источник
comment
Расширение оболочки должно быть inproc COM-сервером. Это означает, что вы должны создать dll вместо exe.   -  person Denis Anisimov    schedule 27.06.2014
comment
@DenisAnisimov хорошо, я попробовал это с py2exe. Проблема, с которой я столкнулся, заключалась в том, как зарегистрировать COM-сервер inProc, чтобы он указывал на созданную dll, созданную py2exe. Используя пример кода здесь Python Shell, он регистрирует локальный ключ server32.   -  person Kyle K    schedule 02.07.2014
comment
как зарегистрироваться - что это значит? Вы неt know how to write registration code or you donне знаете, как зарегистрировать расширение оболочки в Windows?   -  person Denis Anisimov    schedule 02.07.2014
comment
Что ж, я знаю код для регистрации ключа с надписью InProc, но я не знаю, верна ли dll, которую создает py2exe. Я не знаком с тем, как работают COM-серверы. Создаю ли я DLL этого образца code и создать еще один скрипт Python для регистрации ключа InProc, указывающего на dll?   -  person Kyle K    schedule 03.07.2014
comment
@DenisAnisimov Я посмотрел, как tortoiseHG делает свое контекстное меню, и у них есть сервер InProc, указывающий на dll. При использовании проводника dll функции отображаются как DLLCanUnloadNow и DLLGetClassObject. Это то, что мне нужно, чтобы назвать мой сценарий?   -  person Kyle K    schedule 04.07.2014


Ответы (1)


Мне удалось зарегистрировать контекстное меню через dll, следуя инструкциям в этом ссылка. Я закончил тем, что использовал py2exe для 2.7, и я не уверен, была ли исправлена ​​​​установка, которую они использовали, или мне нужно было использовать regsvr32 при регистрации dll вместо исполняемого файла собственного реестра. Я также использовал пропатченный py2exe, который находится в ответе на ссылку

Ссылка: сборка COM-сервера с использованием Python на 64- бит Windows 7 машина

person Kyle K    schedule 15.07.2014