【发布时间】:2014-08-18 18:46:10
【问题描述】:
我正在尝试创建一个外壳扩展上下文菜单和图标覆盖。我已成功注册并看到右键单击时显示上下文菜单,并且在通过 Python 运行程序时菜单单击正确响应代码。
我的问题是当我尝试使用 cx_Freeze 或 py2exe 将 Python 代码编译为可执行文件时。它构建可执行文件并运行可执行文件会创建一个注册表项,但在重新启动 explorer.exe 后右键单击时不显示菜单。
我认为 cx_Freeze 或 py2exe 将能够注册上下文菜单或覆盖并让它与 exe 中的代码对话。我需要制作一个dll文件吗?我对 com 服务器不是很熟悉,所以任何有 shell 扩展经验的人都会非常感激。
如果需要/需要,我会提供更多详细信息。
【问题讨论】:
-
Shell 扩展必须是 inproc COM 服务器。这意味着您必须创建 dll 而不是 exe。
-
@DenisAnisimov 好的,所以我用 py2exe 试过了。我遇到的问题是如何注册 inProc COM 服务器以指向 py2exe 创建的创建的 dll。使用此处的示例代码Python Shell 它注册了一个本地 server32 密钥。
-
“如何注册”——这是什么意思?你不知道
t know how to write registration code or you dont 知道如何在 Windows 中注册你的 shell 扩展吗? -
好吧,我知道注册一个显示 InProc 的密钥的代码,但我不知道 py2exe 创建的 dll 是否正确。我不熟悉 COM 服务器的工作方式。我是否创建此示例code 的 dll 并创建另一个 python 脚本来注册一个 InProc 键以指向该 dll?
-
@DenisAnisimov 我已经查看了 tortoiseHG 如何执行上下文菜单,并且他们有一个指向 dll 的 InProc 服务器。使用 dll 资源管理器,函数显示为 DLLCanUnloadNow 和 DLLGetClassObject。这是我需要调用我的脚本吗?
标签: python executable py2exe cx-freeze shell-extensions