2017-03-15 65 views
0

我最近安装了pywin(我不得不改变一个注册表项来做到这一点,但我改回了它)。我也卸载了Python 2.7,从那以后,我不能再将文件拖放到我的Python脚本中。我也失去了我的文件关联。我已经卸载,重新安装,在我的注册表上运行CCleaner,我已经尝试将默认程序设置为C:\ Python3 \ Python.exe,C:\ Python \ Pythonw.exe,C:\ Windows \ py.exe,C :\ Windows \ pyw.exe,我已经重新启动了我的电脑,但是将文件拖到我的脚本上仍然不起作用。我经历了大量的StackOverflow问题,其中大部分都来自近10年前,似乎不再相关。有没有人有任何想法?谢谢。Python拖放损坏

我也试过this,但它并没有帮助

+1

最简单的你可以尝试修复你的Python 3安装,让安装程序重置文件关联。 – eryksun

+1

请注意,您尝试手动关联可执行文件是您不应该为需要接受命令行参数并实现放置处理程序的脚本执行的操作。文件类型需要与具有“打开”命令模板(例如'py.exe“%1”%*')的程序标识符(ProgId)以及“DropHandler”的CLSID(例如,执行的处理程序通过pyshellext.amd64.dll)。 Python的安装程序创建了用于处理.py脚本的'Python.File' ProgId。 – eryksun

+0

我也尝试修复,它没有工作。我会尝试在注册表中打开密钥。谢谢。编辑:它没有工作 –

回答

0

我在注册表戳周围,做以下的事情固定它(不知道这是必要的,哪些不是)

首先,去HKEY_CLASSES_ROOT.py并确保值设置为Python.File

然后去HKEY_CLASSES_ROOT \ Python.File \壳牌\打开并创建一个名为“Command”键与

"C:\Windows\py.exe" "%1" %* 
作为其值的

。我也做了同样以CLASSES_ROOT \应用程序\ py.exe \打开\命令

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

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

为它的价值。该值是一个DLL的CLSID,它可以获取你正在拖动的文件的文件名,并在命令中运行它,我想呢?

+1

'Python.File'应该已经由安装程序修复,但也许您在当前用户软件类中有冲突的设置。 'HKCR'不是真正的注册表配置单元。这只是一个合并'HKCU \ Software \ Classes'和'HKLM \ Software \ Classes'的视图。它意味着*阅读*,优先考虑当前用户的注册表配置单元。编辑注册表时,您应该始终修改真实的密钥;否则,您不知道您打开的密钥是在HKCU还是HKLM中,具体取决于注册表中已存在的内容。 – eryksun

+1

另外,如果你正在运行3.5+,你已经设置了错误的拖放处理程序。 '{86C86720-42A0-1069-A2E8-08002B30309D}'是我们以前使用的标准EXE drop处理程序。它具有Unicode文件路径的问题,因此Steve Dower为Windows Python创建了一个shell扩展库pyshellext.amd64.dll,它实现了一个ID为{{BEA218D2-6950-497B-9434-61683EC065FE}}的新的放置处理程序。 – eryksun