Ich habe die Zuordnung geändert, um sie beim Starten einer .py
Datei über den Windows-Explorer zu verwenden:
- Extras -> Ordner -> Dateitypen.
- Dann navigieren Sie zu
.py
. - Ändern Sie die Zuordnung zu Wordpad.
Wenn ich nun den Namen einer Py-Datei in die Befehlszeile eingebe, öffnet Wordpad diese.
Aber assoc
und ftype
in der Befehlszeile immer noch Folgendes zurück:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
Wie kommt es, dass der Verein arbeitet assoc
und ftype
es nicht merkt?
Ich habe die Eingabeaufforderung neu gestartet.
Weitere Informationen aus meiner Registrierung:
HKEY_CLASSES_ROOT\.py
= Python.File
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
= wordpad.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids\Python.File
=
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py\(Standard)
= Python.File
Mehr Registrierung:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
Ich nehme an, das ist es, was in auftaucht ftype Python.File
. Aber es scheint nicht gewöhnungsbedürftig zu sein.
(Ich mache dies zum Testen, damit ich irgendwann meine Standardversion von Python einfach auswählen kann.)
windows-xp
file-association
Gauthier
quelle
quelle
Antworten:
Abhängig davon, wie Sie eine Datei aufrufen, hängt es davon ab, welches Verb verwendet wird. Das verwendete Verb bestimmt, wie Windows damit umgeht. Die Standardverben sind Öffnen, Bearbeiten, Drucken, Abspielen und Vorschau. Es ist jedoch möglich , eigene Verben zu erstellen . Das am häufigsten hinzugefügte Verb ist die Open With-Familie (einschließlich OpenWithProgIDs), die dieses kleine Kontext-Untermenü unter "Open With" hinzufügt, um Ihnen mögliche Alternativen zu bieten. Wenn Sie beispielsweise Paint.NET installieren und dann mit der rechten Maustaste auf eine JPG-Datei klicken, wird der Eintrag Öffnen mit zu einem Untermenü erweitert, in dem Paint.NET, Paint und das von Microsoft als Picture Viewer für Ihre Version bezeichnete Programm aufgeführt sind von Windows.
Darüber hinaus ist das, was Unsigned Code Labs gesagt hat, sehr wichtig. Wenn Sie Klassen debuggen, müssen Sie
HKLM\Software\Classes\
und betrachtenHKCU\Software\Classes
.HKCR
Es ist sehr nützlich, um das System abzufragen, aber nicht so gut, um herauszufinden, warum es sich schlecht verhält.Ich habe auf meinem Windows 7-System mit ein wenig getestet
procmon.exe
, und die Befehleassoc
undftype
scheinen zu versuchen, direkt darauf zu schreibenHKCR
, und das System interpretiert dies anscheinend als Schreiben daraufHKLM
. Mein aktuelles Konto ist Mitglied der Administratorgruppe, aber die Benutzerkontensteuerung ist aktiviert. Als ich es versuchte, wurde mir der Zugang verweigertassoc .mytest=MyTest.File
.Seltsamerweise wird diese Verknüpfung
test.mytest
weder angezeigtassoc
noch angezeigt, wenn ich eine Verknüpfung erstelle, indem ich mit der rechten Maustaste auf eine aufgerufene Datei klicke und sie mit Notepadftype
verknüpfe. Der Verein ist definitiv da inHKCU
undHKCR
. Ich habe jedoch keinen Neustart versucht.quelle
Ich weiß nicht, wie Sie die Übereinstimmung zwischen Registrierung und was in Ftype und Assoc angezeigt wird. Für mich und wie ich auch für Sie sehe, sind der Befehl ftype und assoc nutzlos. Was ich mache, um das Standardprogramm für eine bestimmte Erweiterung auf programmatische Weise zu ändern (im Gegensatz zum Standard und einfacher mit dem Explorer), ist diesen Registrierungsschlüssel zu ändern
Zum Beispiel, wenn ich meine MP3s mit mplayer öffnen möchte, habe ich in
der Wert von "mplayerc.mp3"
Was ist die Schwierigkeit dabei: Erstens müssen Sie gültige ProgIDs kennen (verwenden Sie ftype), und zweitens benötigen Sie Schreibzugriff auf diese Struktur. Windows legt automatisch eine Verweigerungs-ACL für den UserChoice-Schlüssel fest. Sie müssen daher eine Möglichkeit finden, diese Verweigerungsregel zu entfernen, um Schreibzugriff zu erhalten. Ich verwende das Programm subinacl, das Sie hier herunterladen können: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=de , um die Berechtigungen zu ändern. Sie können auch das Drittanbieterprogramm SetACL verwenden. Ich empfehle die erste, weil die Syntax viel einfacher ist.
quelle
Der Explorer (die Windows-Shell) bevorzugt immer die Anwendung, die im Herstellerschlüssel angegeben ist, der unter dem Standardwert der Erweiterung angegeben ist. (In deinem Fall
.py
ist die NebenstellePython.File
der Herstellerschlüssel.)ftype
undassoc
kann ihre Werte aus anderen Bereichen lesen, weiß ich nicht sicher. So macht es der Explorer.BEARBEITEN: Diese Seite könnte Sie interessieren: MSDN - Dateitypen
Vor allem das:
Vielleicht kollidieren hier die verschiedenen Teile von Windows, wenn es in HKEY_LOCAL_MACHINE eine "Standard" -Zuordnung gibt, die von der in Ihrem Konto definierten außer Kraft gesetzt wird (die dann in HKEY_CURRENT_USER gespeichert wird).
quelle
Microsoft hat die Funktionsweise ab Windows 8 geändert. Es ist nicht mehr möglich, die Registrierung zu bearbeiten, um dies zu ändern. So zitieren Sie Microsoft :
Microsoft erwartet, dass Sie dies jetzt ändern, und zwar mit einer XML-Datei, die über Gruppenrichtlinien implementiert wird. Anleitung hier .
Glücklicherweise hat Christoph Kolbicz den Hashing-Algorithmus rückgängig gemacht und ein Tool namens SetUserFTA erstellt , um die Dateitypzuordnung festzulegen . Leider ist es Closed Source.
quelle
Hier besteht die Verwechslung zwischen dem, was zum Öffnen einer Datei verwendet wird, und dem, was zum Ausführen einer Datei verwendet wird. Der Registrierungsschlüssel
Hiermit wird Windows mitgeteilt, wie die Datei geöffnet werden soll. Ein Doppelklick auf die Datei öffnet die Datei mit dieser Anwendung.
Da die Datei keine ausführbare Datei ist, wird in der Befehlszeile davon ausgegangen, dass Sie die Datei mit der Standardanwendung öffnen möchten, als hätten Sie darauf doppelt geklickt.
Wenn Sie die Zuordnung wieder zu C: \ Program \ Python27 \ python.exe ändern oder den Registrierungsschlüssel so bearbeiten, dass er auf Python zeigt, sollte der ursprüngliche Zustand wiederhergestellt werden, in dem Windows davon ausgeht, dass Sie die Datei mit dem Standardprogramm öffnen möchten python.exe, auf der das Programm ausgeführt wird.
quelle
.py\Application
zum Öffnen der PY-Dateien verwendet. Was ich nicht verstehe ist, in welchen Fällen der Wert inPython.File
verwendet wird.PATHEXT
Variable). Ich erinnere mich jedoch, dass ich in der Vergangenheit gelesen habe, dass in Explorer erstellte Mitarbeiter immer diejenigen aus demClasses
Registrierungsschlüssel überschreiben .Ihr größter Anhaltspunkt für Zweck und Standort ist der "große Typ", dh die Namen der jeweiligen Bienenstöcke: HKLM und HKCU
Dateizuordnungen werden in beiden Strukturen festgelegt und haben zwei unterschiedliche Zwecke:
Wie der Name schon sagt, legen die HKCU-Registrierungseinträge die Dateizuordnungen für den CURRENT USER fest und überschreiben die entsprechenden Dateitypeinstellungen in HKLM.
HKLM legt die Dateizuordnungen für die LOKALE MASCHINE fest, dh für ALLE BENUTZER der Maschine (sofern nicht durch HKCU-Einträge überschrieben). (Für Win98 war HKCR nur eine Abkürzung für HKLM \ Software \ Classes. Es handelte sich nicht um separate oder unterschiedliche Strukturen. Dies änderte sich jedoch für Win XP und ist nicht mehr zutreffend. HKCR ist jetzt eine virtuelle Struktur, die das Ergebnis der Zusammenführung ist die Schlüssel HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ und HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts, wobei die HKCU-Informationen Vorrang haben.)
Dieses zweistufige System erleichtert nicht nur Eins-zu-Eins-, sondern auch Viele-zu-Eins- und Eins-zu-Viele-Dateizuordnungsschemata. Beispielsweise könnten die Dateitypen .htm, .html und .shtml auf ProgID = htmlfile gesetzt werden, was wiederum einen einzelnen Browser definieren könnte. OTOH, die Einträge können OpenWithList- oder OpenWithProgID-Unterschlüssel mit mehreren Einträgen enthalten, um eine Datei aus einer Liste mehrerer Browser, Editoren oder anderer Apps zu öffnen.
Sowohl HKLM \ Software \ Classes \ als auch HKCU \ Software \ Classes arbeiten auf die gleiche Weise (eine hat nur Vorrang vor der anderen). In der einfachsten Form gibt es einen Registrierungsschlüssel für eine Dateierweiterung (z. B. HKCR.txt), dessen Standardwert die entsprechende ProgID (z. B. txtfile) ist. Zusätzlich oder anstelle des Standardwerts werden möglicherweise zusätzliche ProgID-Namen für den Unterschlüssel "OpenWithProgID" (z. B. txtfile und htmlfile) und / oder zusätzliche Anwendungsnamen aufgeführt, die als Unterschlüssel unter "OpenWithList" (z. B. Notepad ++) angezeigt werden .exe, Opera.exe, Firefox.exe).
Jede ProgID ist in einem anderen Schlüssel in HKCR definiert (z. B. HKCR \ txtfile). Dieser Schlüssel enthält Unterschlüssel, die Windows mitteilen, welches Symbol verwendet werden soll und wie die zugehörige Datei geöffnet, gedruckt, gedruckt usw. werden soll (z. B. HKCR \ txtfile \ shell \ open \ command). In ähnlicher Weise wird jeder Anwendungsname unter HKCR \ Applications als Unterschlüssel definiert (z. B. HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).
Neben dem Schlüssel HKCU \ Software \ Classes befinden sich Dateizuordnungen für Benutzerkonten im Schlüssel HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Diese Einträge gelten nicht nur für den Windows Explorer, wie vorgeschlagen, sondern sind eine zusätzliche Quelle für das Überschreiben der Dateizuordnung für Benutzerkonten. Die Einträge werden von den Dateizuordnungstools im Explorer (Explorer \ Tools \ Folder Options \ File Types) erstellt und enthalten für jede aufgelistete Dateierweiterung einen OpenWithList- und / oder einen OpenwithProgID-Unterschlüssel.
Um eine Dateizuordnung zu ermitteln, sucht Windows zunächst in den HKCU-Einträgen nach einer entsprechenden Dateierweiterung. Nur wenn einer nicht gefunden wird, kommen die HKLM-Einträge ins Spiel. (Hinweis: Ich habe nicht getestet, welche Priorität hat - HKCU \ Software \ Classes oder HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts, aber ich vermute, es wäre der FileExts-Schlüssel). Wenn in der HKCU keine referenzierte ProgID oder kein Anwendungsname gefunden wird, werden die HKLM-Einträge ebenfalls durchsucht. (Beachten Sie, dass \ Applications \ -Einträge nur ein beliebiger Name sind - obwohl sie normalerweise mit dem tatsächlichen Namen der exe-Datei auf der Festplatte identisch sind.)
Um eine Dateizuordnung für ein bestimmtes Benutzerkonto zu definieren, erstellen Sie Einträge in der HKCU-Struktur. Um eine Zuordnung für alle Benutzer zu definieren, erstellen Sie Einträge in der HKLM-Struktur (HKCR) und löschen Sie alle Verweise in der HKCU-Struktur auf diesen Dateityp. Natürlich benötigen Sie die entsprechenden Zugriffsrechte auf die Registrierungsschlüssel.
Ich verwende die Tools assoc und ftype nicht, da ich RegEdit entweder im interaktiven oder im Batch-Modus bevorzuge, aber aus anderen Kommentaren geht hervor, dass sie nur im HKLM-Hive ausgeführt werden und zum Löschen / Setzen von HKCU-Schlüsseln unbrauchbar sind. Nehmen Sie sich etwas Zeit und durchsuchen Sie die oben genannten Schlüssel mit RegEdit, um weitere Beispiele zu sehen.
quelle