Comment associer une application Windows à un type de fichier particulier mais partager cette association avec d'autres applications?

si je crée une nouvelle application, et de s'associer avec, disons, le .xml d'extension de fichier sur un ordinateur en particulier, lorsque l'on double clique sur le .fichier xml, il lancera mon application et passera le fichier comme paramètre. Mais Windows semble savoir quels autres fichiers ont la capacité de travailler avec ce type de fichier. Comment est ce jeu?

aussi, quand je sauve un fichier Microsoft Word comme un .fichier xml, puis double-cliquez sur le fichier pour lancer Microsoft Word, même si l' .le type de fichier xml est associé à autre chose, comme Internet Explorer. Semble comme il peut y avoir un talon associé .type de fichier xml qui lorsqu'il est invoqué regarde le contenu et lance l'application appropriée.

Existe-t-il une API Windows, ou un moyen standard de le faire?

ce que je voulais créer une application pour faire exactement ce que Word fait -- i.e. enregistrer le fichier dans le .format xml, mais quand double-cliqué, lance l'application my au lieu d'Internet Explorer.

16
demandé sur mustaccio 2009-10-15 01:26:49

3 réponses

mécanisme d'ouverture du Bureau .les Documents xml

pour les documents Word enregistrés en XML et ayant un .extensions xml Microsoft a mis en place un gestionnaire spécial pour ouvrir ces fichiers dans l'application correspondante (ce mécanisme n'est pas seulement utilisé pour les documents Word, mais aussi pour les tableurs Excel, Les formulaires InfoPath et d'autres formats).

Si vous signez le Registre, vous verrez que le type de fichier pour les fichiers avec une .extension xml est définie à xmlfile:

HKEY_CLASSES_ROOT\.xml (Default) = "xmlfile"

La commande qui est exécutée lorsque ce type de fichier est ouvert est spécifié dans

HKEY_CLASSES_ROOT\xmlfile\shell\open\command = ""C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSOXMLED.EXE" /verb open "%1""

ainsi quand un fichier XML est double-cliqué dans L'Explorateur, Windows lancera MSOXMLED.EXE. Cette application cherche maintenant à l'intérieur du fichier XML et cherche une instruction de traitement XML. Cette instruction de traitement nommée mso-application peut spécifier un programme:

<?mso-application progid="Word.Document"?>

si cette instruction de traitement est trouvée et la ProgId est l'une des valeurs supportées MSOXMLED.EXE recherche dans le Registre la commande open spécifiée pour ce programme. Mot.Document il ya en fait une autre redirection Mot.Document12 (Si Office 2007 est installé) en utilisant la sous-clé CurVer de Word.Document, de sorte que nous nous retrouvons avec:

HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\command = ""C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /n /dde"

alors finalement MSOXMLED.EXE lancera L'application Office appropriée ou lancera L'application XML par défaut qui est spécifiée

HKEY_CLASSES_ROOT\XEV.GenericApp\shell\open\command

vous pouvez en fait essayer cela en appelant MSOXMLED.EXE à partir de la ligne de commande:

MSOXMLED.EXE /verb OPEN "SampleWordMLDocument.xml"

si vous souhaitez implémenter le même comportement, vous devez implémenter un handler comme MSOXMLED.EXE qui recherche à l'intérieur du fichier une instruction de traitement prédéfinie et achemine ensuite le document à l'application appropriée.

gestion des icônes

ci-dessus, nous avons examiné la façon dont l'ouverture et la révision des documents sont traitées. Un autre mécanisme est responsable de l'affichage d'une icône spécifique en fonction de l'instruction de traitement à l'intérieur du document XML:gestionnaire d'icône.

les gestionnaires D'icônes sont un type d'extensions de Shell D'Explorateur qui sont des objets COM en processus qui peuvent être associés avec certains types de fichiers. Celui utilisé pour les fichiers XML est spécifié dans le Registre sous

HKEY_CLASSES_ROOT\xmlfile\ShellEx\IconHandler = "{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"

ce guide fait référence au MSOXEV.dll qui - de la même façon que MSOXMLEX.EXE inspecte le fichier XML pour le programme et fournit ensuite l'icône correcte.

comme tout cela est un mécanisme assez compliqué, vous devriez considérer attentivement si vous voulez aller de ce côté. À mon avis, il est beaucoup plus simple d'enregistrer une nouvelle extension de fichier unique. Il est également limité car il ne fonctionne qu'avec les types de fichiers qui vous permettent d'inclure certaines informations personnalisées (comme ProgId) dans l'en-tête de fichier.

Microsoft n'utilise plus cette méthode et utilise extensions de fichiers à la place de leurs nouveaux formats OpenXML (voir Pourquoi faire Office ".xml" fichiers se comportent différemment des autres ".xml de fichiers"?).

18
répondu Dirk Vollmar 2009-10-14 23:53:17

Eh bien, toutes les associations de fichiers sont stockées dans le registre. Il y a un article," comprendre les Associations de fichiers MS Windows" qui peut aider.

au-delà de cela, il y a de nombreuses façons de créer des associations de fichiers par programmation. Bien que le plus souvent cela soit fait dans l'installateur. Par exemple, mon système d'installation préféré NSIS a une macro pour gérer ceci:http://nsis.sourceforge.net/FileAssoc

mais il y a aussi le défi de définition d'un programme par défaut pour ouvrir un certain type de fichier. Je ne sais pas quelle langue ou système d'installation vous prévoyez d'utiliser pour faire cela, mais il semble que la question Est la réponse ici pour les INS. Sûrement Microsoft a également la documentation pour leur façon de faire cela avec Windows Installer. Mais comme vous pouvez probablement deviner, je suis plus un gars de NSIS. ;)

3
répondu Steve Wortham 2017-05-23 11:53:46

dans L'Explorateur Windows, cliquez sur Outils - > Options des dossiers - > Types de fichiers. En cliquant sur" Nouveau "ou" avancé " vous pouvez créer/modifier vos propres associations d'application avec divers types de fichiers qui apparaîtront lorsque vous faites un clic droit sur le fichier.

EDIT: Je ne sais pas s'il y a un talon qui redirige des fichiers spécifiques. Vous pouvez vérifier mon ordinateur\HKEY_CLASSES_ROOT dans le registre et de voir ce qu'il met là.

0
répondu Repo Man 2009-10-14 21:31:47