2017-03-15 4 views
0

Ich habe kürzlich pywin installiert (ich musste einen Registrierungseintrag ändern, um es zu tun, aber ich änderte es zurück). Ich habe Python 2.7 auch deinstalliert und seither kann ich keine Dateien mehr per Drag & Drop auf meine Python-Skripte ziehen. Ich habe auch meine Dateiverknüpfungen verloren. Ich habe seit deinstalliert, neu installiert, führen CCleaner auf meiner Registrierung, ich habe versucht, das Standardprogramm auf C: \ Python3 \ Python.exe, C: \ Python \ Pythonw.exe, C: \ Windows \ py.exe, C : \ Windows \ pyw.exe, Ich habe meinen Computer neu gestartet, aber das Ziehen von Dateien auf mein Skript funktioniert immer noch nicht. Ich habe eine Menge StackOverflow-Fragen durchgespielt, die meisten von ihnen sind vor fast 10 Jahren und scheinen nicht mehr relevant zu sein. Hat jemand irgendwelche Ideen? Vielen Dank.Python Drag-and-Drop gebrochen

Ich habe auch versucht this aber es half nicht in der Registrierung

+1

Am einfachsten können Sie versuchen, Ihre Python 3-Installation zu reparieren, damit das Installationsprogramm die Dateizuordnung zurücksetzen kann. – eryksun

+1

Beachten Sie, dass Ihr Versuch, manuell mit der ausführbaren Datei zu verknüpfen, etwas ist, das Sie nicht für Skripts ausführen sollten, die Befehlszeilenargumente akzeptieren müssen und einen Drop-Handler implementieren müssen. Der Dateityp muss mit einer Programmkennung (ProgId) verknüpft sein, die eine "offene" Befehlsvorlage (zB 'py.exe"% 1 "% *') und auch die CLSID eines "DropHandlers" (zB den Handler implementiert) hat von pyshellext.amd64.dll). Das Python-Installationsprogramm erstellt die 'Python.File'-ProgId für die Handhabung von .py-Skripten. – eryksun

+0

Ich habe auch versucht zu reparieren, es hat nicht funktioniert. Ich werde versuchen, mit dem offenen Schlüssel in der Registrierung herumzualbern. Vielen Dank. edit: Es hat nicht funktioniert –

Antwort

0

ich stocherte und fixiert sie durch die folgenden Dinge zu tun (nicht sicher, was und notwendig waren, die waren nicht)

Erstens Geh zu HKEY_CLASSES_ROOT.py und stellen Sie sicher, dass der Wert

Dann gehen Sie zu HKEY_CLASSES_ROOT \ Python.File \ Shell \ Open Python.File gesetzt und erstellen Sie einen Schlüssel namens "Command" mit

"C:\Windows\py.exe" "%1" %* 

als sein Wert. Ich tat das gleiche zu CLASSES_ROOT \ Applications \ py.exe \ open \ command

zu CLASSES_ROOT \ Python.File \ ShellEx Dann gehen und einen Schlüssel namens "DropHandler" mit

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

als Wert. Dieser Wert ist die CLSID einer DLL, die den Dateinamen der Datei, die Sie ziehen, abruft und in Befehl ausführt, denke ich?

+1

'Python.File' sollte vom Installer repariert worden sein, aber vielleicht hatten Sie widersprüchliche Einstellungen in Ihren derzeitigen Benutzer-Software-Klassen. 'HKCR' ist keine echte Registrierungsstruktur. Es ist nur eine Ansicht, die 'HKCU \ Software \ Classes' und' HKLM \ Software \ Classes' zusammenführt. Es ist für * Lesen * gedacht, wobei der Registry-Struktur des aktuellen Benutzers Priorität eingeräumt wird. Sie sollten die echten Schlüssel immer ändern, wenn Sie die Registrierung bearbeiten. andernfalls können Sie nicht wissen, ob der Schlüssel, den Sie geöffnet haben, "HKCU" oder "HKLM" war, je nachdem, was bereits in der Registrierung vorhanden ist. – eryksun

+1

Wenn Sie 3.5+ ausführen, haben Sie den falschen Drop-Handler festgelegt. '{86C86720-42A0-1069-A2E8-08002B30309D}' ist der Standard-EXE-Drop-Handler, den wir verwendet haben. Da es Probleme mit Unicode-Dateipfaden gibt, hat Steve Dower eine Shell-Erweiterungsbibliothek für Windows Python, pyshellext.amd64.dll, erstellt, die einen neuen Drop-Handler mit der ID '{BEA218D2-6950-497B-9434-61683EC065FE}' implementiert. – eryksun