Wie bekomme ich ftype & assoc passend zum Windows Explorer?

20

Ich habe die Zuordnung geändert, um sie beim Starten einer .pyDatei über den Windows-Explorer zu verwenden:

  1. Extras -> Ordner -> Dateitypen.
  2. Dann navigieren Sie zu .py.
  3. Ändern Sie die Zuordnung zu Wordpad.

Wenn ich nun den Namen einer Py-Datei in die Befehlszeile eingebe, öffnet Wordpad diese.

Aber assocund ftypein 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 assocund ftypees 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.)

Gauthier
quelle

Antworten:

9

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 betrachten HKCU\Software\Classes. HKCREs 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 Befehle assocund ftypescheinen zu versuchen, direkt darauf zu schreiben HKCR, und das System interpretiert dies anscheinend als Schreiben darauf HKLM. Mein aktuelles Konto ist Mitglied der Administratorgruppe, aber die Benutzerkontensteuerung ist aktiviert. Als ich es versuchte, wurde mir der Zugang verweigert assoc .mytest=MyTest.File.

Seltsamerweise wird diese Verknüpfung test.mytestweder angezeigt assocnoch angezeigt, wenn ich eine Verknüpfung erstelle, indem ich mit der rechten Maustaste auf eine aufgerufene Datei klicke und sie mit Notepad ftypeverknüpfe. Der Verein ist definitiv da in HKCUund HKCR. Ich habe jedoch keinen Neustart versucht.

Speckwürfel
quelle
Für zukünftige Leser
TheIncorrigible1
@ TheIncorrigible1 Link ist tot :(
DaveInCaz
@ DaveInCaz Oh, das ist wirklich traurig. Ich ärgere mich, dass sie alle MSFT-Blog-Links gebrochen haben. Ich werde sehen, ob ich es wiederherstellen kann. hoffentlich hat es nur einen neuen Link und ist nicht verschwunden (wie es bei einigen anderen Dingen der Fall ist)
TheIncorrigible1
5

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

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID

Zum Beispiel, wenn ich meine MP3s mit mplayer öffnen möchte, habe ich in

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice\ProgID 

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.

mjsr
quelle
3

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 .pyist die Nebenstelle Python.Fileder Herstellerschlüssel.)

ftypeund assockann 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:

Die Unterstruktur HKEY_CLASSES_ROOT ist eine Ansicht, die durch Zusammenführen von HKEY_CURRENT_USER \ Software \ Classes und HKEY_LOCAL_MACHINE \ Software \ Classes erstellt wird.

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
3

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 :

In Pre-Win 8 konnten Apps den Standardhandler für einen Dateityp / ein Protokoll festlegen, indem sie die Registrierung manipulierten. Dies bedeutet, dass Sie problemlos ein Skript oder eine Gruppenrichtlinie haben konnten, die die Registrierung manipulierten. In Win 8 werden die Registrierungsänderungen jedoch durch einen Hash (eindeutig pro Benutzer und App) überprüft, der Manipulationen durch Apps erkennt. Fehlt ein gültiger Hash, ignorieren wir den Standardwert in der Registrierung.

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.

Pholcroft
quelle
SetUserFTA ist sehr nützlich und kann als Skript erstellt werden.
DaveInCaz
1

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

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application

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.

Majenko
quelle
Wenn ich das richtig verstehe, wird der Schlüssel .py\Applicationzum Öffnen der PY-Dateien verwendet. Was ich nicht verstehe ist, in welchen Fällen der Wert in Python.Fileverwendet wird.
Gauthier
Laut Majenko hängt es vom Wetter ab, ob eine Erweiterung von Windows wie eine ausführbare Datei behandelt wird (siehe PATHEXTVariable). Ich erinnere mich jedoch, dass ich in der Vergangenheit gelesen habe, dass in Explorer erstellte Mitarbeiter immer diejenigen aus dem ClassesRegistrierungsschlüssel überschreiben .
Piotr Dobrogost
1

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.

ArtKns
quelle
HKCR funktioniert nicht so, wie Sie denken. In HKCR habe ich einen "Quellcode" -Eintrag. "Quellcode" existiert nicht in HKLM \ Software \ Classes. Andererseits ist in HKCU \ Software \ Classes "Quellcode" vorhanden. Offensichtlich enthält HKCR Einträge aus HKCU \ Software \ Classes. Andererseits sind sowohl in HKCR als auch in HKLM "SoundRec" und "SPCFile" vorhanden. HKCU \ Software \ Classes verfügt jedoch nicht über diese. Somit enthält HKCR offensichtlich auch Einträge von HKLM. HKCR verschmilzt die beiden Standorte definitiv auf irgendeine Weise. Siehe auch superuser.com/a/266274
Ben