【问题标题】:Writing shell extensions in Python and compiling用 Python 编写 shell 扩展并编译
【发布时间】: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


【解决方案1】:

按照link 中的步骤,我能够通过 dll 注册上下文菜单。我最终在 2.7 中使用了 py2exe,但我不确定他们使用的设置是否修复了它,或者我在注册 dll 而不是自我注册表可执行文件时是否需要使用 regsvr32。我还使用了链接答案中的修补 py2exe

链接: Com server build using Python on 64-bit Windows 7 machine

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2012-01-26
    • 1970-01-01
    • 2012-02-07
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多