Comment puis-je obtenir ftype & assoc pour correspondre à l'Explorateur Windows?


20

J'ai changé l'association à utiliser lors du lancement d'un .pyfichier, via l'Explorateur Windows:

  1. Outils -> Dossiers -> Types de fichiers.
  2. Naviguez ensuite jusqu'à .py.
  3. Changez l'association en Wordpad.

Maintenant, lorsque je tape le nom d'un fichier py dans la ligne de commande, Wordpad l'ouvre.

Mais assocet ftypedans la ligne de commande, renvoyez toujours ce qui suit:

C:\> assoc .py
.py = Python.File

C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*

Comment se fait l'association travaille, mais assocet ftypene sont pas au courant?

J'ai redémarré l'invite.


Plus d'informations sur mon registre:

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

Plus de registre:

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`

Je suppose que c'est ce qui apparaît ftype Python.File. Mais cela ne semble pas s'habituer.


(Je fais cela pour les tests, donc je peux éventuellement choisir ma version par défaut de Python facilement).


Réponses:


9

Selon la façon dont vous appelez un fichier, cela dépendra du verbe utilisé. Le verbe que vous utilisez détermine ce que Windows en fera. Les verbes standard sont Open, Edit, Print, Play et Preview. Cependant, il est possible de créer vos propres verbes . Le verbe le plus souvent ajouté est la famille Open With (y compris OpenWithProgIDs), qui ajoute ce petit sous-menu contextuel sous "Open With" pour vous donner des alternatives possibles. Si vous installez Paint.NET, par exemple, puis cliquez avec le bouton droit sur un fichier .jpg, vous verrez l'entrée Ouvrir avec se développe en un sous-menu qui répertorie Paint.NET, Paint et tout ce que Microsoft a appelé la visionneuse d'images pour votre version de Windows.

De plus, ce que les laboratoires de code non signés ont dit est très important. Lorsque vous déboguez des classes, vous devez regarder HKLM\Software\Classes\et HKCU\Software\Classes. HKCRest très utile pour interroger le système, mais pas si bon pour savoir pourquoi il se comporte mal.

J'ai fait un petit test sur mon système Windows 7 avec procmon.exe, et les commandes assocet ftypesemblent essayer d'écrire directement dans HKCR, et le système interprète apparemment cela comme une écriture HKLM. Mon compte actuel est membre du groupe d'administration, mais l'UAC est activé. On m'a refusé l'accès quand j'ai essayé assoc .mytest=MyTest.File.

Curieusement, si je crée une association en cliquant avec le bouton droit sur un fichier appelé test.mytestet en l'associant au Bloc-notes, ni assocne ftypevoit cette association. L'association est définitivement présente en HKCUet HKCR. Je n'ai cependant pas essayé de redémarrer.



@ Le lien TheIncorrigible1 est mort :(
DaveInCaz

@DaveInCaz Oh, c'est vraiment triste. Je suis ennuyé qu'ils aient rompu tous les liens du blog MSFT. Je vais voir si je peux le restaurer; j'espère qu'il a juste un nouveau lien et n'a pas disparu (comme c'est le cas pour d'autres choses)
TheIncorrigible1


5

je ne sais pas comment faire la correspondance entre le registre et ce qui apparaît dans ftype et assoc. Pour moi et comme je le vois aussi, la commande ftype et assoc sont inutiles. Ce que je fais pour changer le programme par défaut pour une extension donnée de manière programmatique (vs la manière standard et plus simple en utilisant l'explorateur) est de modifier cette clé de registre

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

Par exemple, si je veux ouvrir mes mp3 avec mplayer je mets

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

la valeur de "mplayerc.mp3"

Quelles sont les complications de cette opération: vous devez d'abord connaître les ID de programme valides (utiliser ftype) et deuxièmement, vous devez avoir un accès en écriture à cette ruche. Windows met automatiquement une ACL de refus pour la clé UserChoice, vous devez donc trouver un moyen de supprimer cette règle de refus afin d'obtenir l'accès en écriture. J'utilise le programme subinacl, que vous pouvez télécharger à partir d'ici http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en pour modifier les autorisations. Vous pouvez également utiliser le programme tiers SetACL. Je recommande le premier car la syntaxe est beaucoup plus simple.


3

Explorer (le shell Windows) donne toujours la préférence à l'application spécifiée dans la clé du fournisseur qui est spécifiée sous la valeur par défaut de l'extension. (Dans votre cas, .pyc'est l'extension, Python.Filec'est la clé du fournisseur.)

ftypeet assocpeut lire leurs valeurs dans d'autres domaines, je ne sais pas avec certitude. C'est comme ça qu'Explorer le fait.

EDIT: Cette page peut vous intéresser: MSDN - Types de fichiers

Surtout ceci:

La sous-arborescence HKEY_CLASSES_ROOT est une vue formée par la fusion de HKEY_CURRENT_USER \ Software \ Classes et HKEY_LOCAL_MACHINE \ Software \ Classes.

C'est peut-être là que les différentes parties de Windows s'affrontent, s'il existe une association "par défaut" dans HKEY_LOCAL_MACHINE, qui est remplacée par celle que vous avez définie sur votre compte (qui serait ensuite stockée dans HKEY_CURRENT_USER).


3

Microsoft a changé son fonctionnement à partir de Windows 8. Il n'est plus possible de modifier le registre pour changer cela. Pour citer Microsoft :

Dans Pre-Win 8, les applications pouvaient définir le gestionnaire par défaut pour un type de fichier / protocole en manipulant le registre, cela signifie que vous pourriez facilement avoir un script ou une stratégie de groupe manipulant le registre. Cependant, dans Win 8, les modifications du registre sont vérifiées par un hachage (unique par utilisateur et application) qui détecte la falsification par les applications. En l'absence d'un hachage valide, nous ignorons la valeur par défaut dans le registre.

La façon dont Microsoft s'attend à ce que vous changiez cela maintenant est avec un fichier xml qui est implémenté via la stratégie de groupe. Instructions ici .

Heureusement, Christoph Kolbicz a procédé à une ingénierie inverse de l'algorithme de hachage et a créé un outil appelé SetUserFTA pour définir l'association de type de fichier. Malheureusement, c'est une source fermée.


SetUserFTA est super utile et peut être scripté.
DaveInCaz

1

La confusion est ici entre ce qui est utilisé pour ouvrir un fichier et ce qui est utilisé pour exécuter un fichier. La clé de registre

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

est ce qui indique à Windows comment ouvrir le fichier. Double-cliquer sur le fichier ouvrira le fichier avec cette application.

Comme le fichier n'est pas un fichier exécutable, la ligne de commande suppose que vous souhaitez ouvrir le fichier avec l'application par défaut, comme si vous aviez double-cliqué dessus.

La modification de l'association en C: \ Program \ Python27 \ python.exe ou la modification de la clé de registre pour pointer vers python devrait la ramener à ce qu'elle était, où Windows suppose que vous souhaitez ouvrir le fichier avec le programme par défaut, qui est python.exe, qui exécute ensuite le programme.


Si je comprends bien, la clé .py\Applicationest utilisée pour ouvrir les fichiers py. Ce que je ne comprends pas, c'est dans quels cas la valeur en Python.Fileest utilisée.
Gauthier

Selon Majenko, cela dépend de la météo, car l'extension est traitée par Windows comme un exécutable (voir PATHEXTvariable). Cependant, je me souviens avoir lu dans le passé que les associés créés à partir d'Explorer remplaçaient toujours ceux de la Classesclé de registre.
Piotr Dobrogost

1

Votre plus grand indice sur le but et l'emplacement est dans le "grand type", c'est-à-dire les noms des ruches respectives: HKLM et HKCU

Les associations de fichiers sont définies dans les deux ruches et ont deux objectifs différents:

Comme son nom l'indique, les entrées de registre HKCU définissent les associations de fichiers pour l'UTILISATEUR ACTUEL et remplacent les paramètres de type de fichier correspondants dans HKLM.

HKLM définit les associations de fichiers pour la MACHINE LOCALE, c'est-à-dire pour TOUS LES UTILISATEURS de la machine (sauf si écrasé par les entrées HKCU). (Pour Win98, HKCR n'était qu'un alias abrégé pour HKLM \ Software \ Classes. Ce n'étaient pas des ruches distinctes ou différentes. Cependant, cela a changé pour Win XP et n'est plus vrai. HKCR est maintenant une ruche virtuelle qui est le résultat de la fusion les clés HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ et HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts, les informations HKCU étant prioritaires.)

Ce système en deux étapes facilite non seulement les schémas d'association de fichiers un-à-un mais plusieurs-à-un et un-à-plusieurs. Par exemple, les types de fichiers .htm, .html et .shtml peuvent tous être définis sur ProgID = htmlfile, qui à son tour pourrait définir un seul navigateur. OTOH, les entrées peuvent contenir des sous-clés OpenWithList ou OpenWithProgID avec plusieurs entrées pour ouvrir un fichier à partir d'une liste de plusieurs navigateurs, éditeurs ou autres applications.

HKLM \ Software \ Classes \ et HKCU \ Software \ Classes fonctionnent de la même manière (l'un a juste priorité sur l'autre). Dans la forme la plus simple, il existe une clé de registre pour une extension de fichier (par exemple, HKCR.txt) dont la valeur par défaut est le ProgID correspondant (par exemple, txtfile). En plus ou à la place de la valeur par défaut, il peut y avoir des noms ProgID supplémentaires répertoriés pour la sous-clé "OpenWithProgID" (par exemple, txtfile et htmlfile), et / ou des noms d'application supplémentaires apparaissant comme sous-clés sous "OpenWithList" (par exemple, le bloc-notes ++ .exe, Opera.exe, Firefox.exe).

Chaque ProgID est défini dans une autre clé dans HKCR (par exemple, HKCR \ txtfile). Cette clé contient des sous-clés pour indiquer à Windows quelle icône utiliser et comment ouvrir, imprimer, imprimer dans, etc. le fichier associé (par exemple, g, HKCR \ txtfile \ shell \ open \ command). De même, chaque nom d'application est défini comme une sous-clé sous HKCR \ Applications (par exemple, HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).

Outre la clé HKCU \ Software \ Classes, les associations de fichiers de compte d'utilisateur se trouvent dans la clé HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Ces entrées ne sont pas uniquement destinées à l'Explorateur Windows, comme cela a été suggéré, mais constituent une source supplémentaire de remplacements d'association de fichiers de compte d'utilisateur. Les entrées sont créées par les outils d'association de fichiers dans l'explorateur (Explorer \ Tools \ Folder Options \ File Types) et contiennent une sous-clé OpenWithList et / ou OpenwithProgID pour chaque extension de fichier répertoriée.

Pour déterminer une association de fichiers, Windows examine d'abord les entrées HKCU pour une extension de fichier correspondante. Ce n'est que si aucun n'est trouvé que les entrées HKLM entrent en jeu. (Remarque: je n'ai pas testé ce qui a la priorité - HKCU \ Software \ Classes ou HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts mais je soupçonne que ce serait la clé FileExts). De même, si un ProgID référencé ou un nom d'application n'est pas trouvé dans HKCU, les entrées HKLM sont recherchées. (Notez que les entrées \ Applications \ ne sont que des noms arbitraires - même si elles sont généralement identiques au nom de fichier exe sur le disque.)

Donc, pour définir une association de fichiers pour un compte d'utilisateur spécifique, créez des entrées dans la ruche HKCU. Pour définir une association pour tous les utilisateurs, créez des entrées dans la ruche HKLM (HKCR) et supprimez toutes les références dans la ruche HKCU à ce type de fichier. De toute évidence, vous avez besoin des droits d'accès appropriés aux clés de registre.

Je n'utilise pas les outils assoc et ftype car je préfère utiliser RegEdit en mode interactif ou batch, mais d'après d'autres commentaires, il semble qu'ils ne fonctionnent que sur la ruche HKLM et ne sont pas utiles pour effacer / définir les clés HKCU. Prenez du temps et parcourez les clés susmentionnées avec RegEdit pour voir plus d'exemples.


HKCR ne fonctionne pas comme vous le pensez. Dans HKCR, j'ai une entrée "code source". "code source" n'existe pas dans HKLM \ Software \ Classes. D'un autre côté, dans HKCU \ Software \ Classes, le "code source" est présent. Donc, évidemment, HKCR inclut des entrées de HKCU \ Software \ Classes. D'un autre côté, dans HKCR et HKLM, "SoundRec" et "SPCFile" sont présents. Mais HKCU \ Software \ Classes ne les a pas. Ainsi, HKCR comprend également évidemment des entrées de HKLM. HKCR fusionne définitivement les deux sites d'une manière ou d'une autre. Voir aussi superuser.com/a/266274
Ben
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.