【问题标题】:Python Drag-and-drop brokenPython 拖放损坏
【发布时间】:2017-03-15 18:52:49
【问题描述】:

我最近安装了 pywin(我必须更改注册表项才能执行此操作,但我将其更改回来)。我还卸载了 Python 2.7,从那时起,我不能再将文件拖放到我的 Python 脚本中。我也丢失了我的文件关联。我已经卸载,重新安装,在我的注册表上运行 CCleaner,我尝试将默认程序设置为 C:\Python3\Python.exe, C:\Python\Pythonw.exe, C:\Windows\py.exe, C :\Windows\pyw.exe,我已经重新启动了我的计算机,但是将文件拖到我的脚本上仍然不起作用。我已经经历了大量的 StackOverflow 问题,其中大多数是近 10 年前的问题,似乎不再相关。有没有人有任何想法?谢谢。

我也试过this,但没有帮助

【问题讨论】:

  • 在最简单的情况下,您可以尝试修复您的 Python 3 安装,让安装程序重置文件关联。
  • 请注意,对于需要接受命令行参数并实现删除处理程序的脚本,您不应尝试手动关联可执行文件。文件类型需要与具有“打开”命令模板(例如py.exe "%1" %*)以及“DropHandler”(例如由 pyshellext.amd64.dll 实现的处理程序)的 CLSID 的程序标识符 (ProgId) 相关联。 Python 的安装程序会创建 Python.File ProgId 来处理 .py 脚本。
  • 我也试过修复,还是不行。我会尝试弄乱注册表中的打开键。谢谢。编辑:它没有工作
  • 修复是修复Python.File 以获得正确的模板、图标和放置处理程序,以防出现问题。下一步是使用控制面板“默认程序”对话框更改 .py 文件关联。要使用的应用程序应命名为“Python”,如果您选择安装 py 启动器,则图标上应该有一个火箭。
  • 谢谢,我终于想通了。我的注册表项由于某种原因被破坏了,我不得不手动修复它

标签: python windows drag-and-drop python-3.6


【解决方案1】:

我在注册表中四处寻找并通过执行以下操作来修复它(不确定哪些是必要的,哪些不是)

首先,转到 HKEY_CLASSES_ROOT.py 并确保将值设置为 Python.File

然后转到 HKEY_CLASSES_ROOT\Python.File\Shell\Open 并使用

创建一个名为“Command”的键
"C:\Windows\py.exe" "%1" %* 

作为它的值。我对 CLASSES_ROOT\Applications\py.exe\open\command 做了同样的事情

然后转到 CLASSES_ROOT\Python.File\ShellEx 并创建一个名为“DropHandler”的键

{86C86720-42A0-1069-A2E8-08002B30309D}

作为它的值。我认为该值是获取您正在拖动的文件的文件名并在命令中运行它的 DLL 的 CLSID?

【讨论】:

  • Python.File 应该已由安装程序修复,但您当前用户软件类中的设置可能存在冲突。 HKCR 不是真正的注册表配置单元。这只是一个合并HKCU\Software\ClassesHKLM\Software\Classes 的视图。它用于阅读,优先考虑当前用户的注册表配置单元。编辑注册表时应始终修改真实键;否则你无法知道你打开的密钥是在HKCU还是HKLM,这取决于注册表中已经存在的内容。
  • 另外,如果你运行的是 3.5+,你设置了错误的 drop handler。 {86C86720-42A0-1069-A2E8-08002B30309D} 是我们过去使用的标准 EXE 删除处理程序。它存在 Unicode 文件路径问题,因此 Steve Dower 为 Windows Python 创建了一个 shell 扩展库 pyshellext.amd64.dll,它实现了一个 ID 为 {BEA218D2-6950-497B-9434-61683EC065FE} 的新删除处理程序。
猜你喜欢
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
相关资源
最近更新 更多