J'ai changé l'association à utiliser lors du lancement d'un .py
fichier, via l'Explorateur Windows:
- Outils -> Dossiers -> Types de fichiers.
- Naviguez ensuite jusqu'à
.py
. - Changez l'association en Wordpad.
Maintenant, lorsque je tape le nom d'un fichier py dans la ligne de commande, Wordpad l'ouvre.
Mais assoc
et ftype
dans 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 assoc
et ftype
ne 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).
windows-xp
file-association
Gauthier
la source
la source
Réponses:
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\
etHKCU\Software\Classes
.HKCR
est 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 commandesassoc
etftype
semblent essayer d'écrire directement dansHKCR
, et le système interprète apparemment cela comme une écritureHKLM
. 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.mytest
et en l'associant au Bloc-notes, niassoc
neftype
voit cette association. L'association est définitivement présente enHKCU
etHKCR
. Je n'ai cependant pas essayé de redémarrer.la source
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
Par exemple, si je veux ouvrir mes mp3 avec mplayer je mets
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.
la source
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,
.py
c'est l'extension,Python.File
c'est la clé du fournisseur.)ftype
etassoc
peut 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:
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).
la source
Microsoft a changé son fonctionnement à partir de Windows 8. Il n'est plus possible de modifier le registre pour changer cela. Pour citer Microsoft :
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.
la source
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
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.
la source
.py\Application
est utilisée pour ouvrir les fichiers py. Ce que je ne comprends pas, c'est dans quels cas la valeur enPython.File
est utilisée.PATHEXT
variable). Cependant, je me souviens avoir lu dans le passé que les associés créés à partir d'Explorer remplaçaient toujours ceux de laClasses
clé de registre.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.
la source