12
votes

Comment changer d'association FileType dans le registre?

première publication dans Stackoverflow. :RÉ J'ai besoin de mon logiciel pour ajouter quelques choses dans le registre.

Mon programme utilisera

processus.start (@ "blblabla.smc");

Pour lancer un fichier, mais le problème est que le problème est probablement que l'utilisateur n'aura pas de programme défini comme application par défaut pour l'extension de fichier particulière.

Comment puis-je ajouter des associations de fichiers au Windowsregistry?


0 commentaires

4 Réponses :


1
votes

Si vous envisagez de fournir un programme d'installation pour votre application, utilisez simplement la fonctionnalité Association de fichiers disponible dans le cadre de l'installateur que vous choisissez d'utiliser - même le projet Visual Studio Configuration sait faire cela.

Pour modifier les associations de type de fichier directement à partir de votre code, je pense que vous devez regarder dans HKEY_CLASSES_ROOT et rechercher / créer une touche avec l'extension que vous souhaitez lier (c'est-à-dire ".pdf"). Dans cette touche, la valeur par défaut est une chaîne contenant une référence à une autre clé dans hkey_classes_root . Allez Suivez ce pointeur, développez / créez la sous-clé coquille et ajoutez / modifiez vos commandes ici. Regardez autour de cette zone avec regedit pour obtenir le fallage de la façon dont il a l'air.

J'ai du code C # dans un projet de mine pour animaux de compagnie, qui lève la reliure pour les fichiers PDF et ajoute une option supplémentaire à leurs menus contextuels. N'hésitez pas à Vous avez un look . < / p>


0 commentaires

8
votes

Utilisez le registre code> a> classe in Microsoft.win32 code> a >.

Plus précisément, vous voulez le ClassesRoot code> Propriété de Registry CODE> Pour accéder au hkey_classes_root code > clé (cf. Comprendre les associations de fichiers MS Windows et hkey_classes_root: services de base ). p> xxx pré>

remplacer "Smcprocessor \"% 1 \ "" code> avec la spécification de la trajectoire de ligne de commande et de l'argument du programme que vous souhaitez associer à des fichiers avec une extension .SMC code>. p>

mais, au lieu de jouer avec le registre, pourquoi pas seulement dire P>

Process.Start("SMCProcessor blblabla.smc");


2 commentaires

J'ai ce code: 'Process EmulatorProcess; EmulatorProcess = processus.start (@ "C: \ Documents et paramètres \ Serg \ Desktop \ emubox v0.01 \ supernintendo \ roms \ Super Mario RPG (U) .SMC"); EmulatorProcess.WaitForinPutiveDle (); ' J'ai utilisé un chemin codé pour tester les choses. Comment pourrais-je appliquer votre dernière ligne de code à mes besoins? Merci! :RÉ


De Cette réponse : "" Le RegistryKey implémente de la classe Idisposable Et donc, vous devriez envelopper vos clés dans un à l'aide de instruction. " ou, vous devez également appeler Fermer ou éliminer sur le registrykey lorsque vous avez terminé avec elle. Cela signifie que, y compris CreateSubkey dans une chaîne de méthode, comme indiqué dans cet exemple est une mauvaise idée.



28
votes

En plus des réponses déjà fournies, vous pouvez y accomplir en appelant les programmes de ligne de commande "ASSO" et "FTYPE". FTYPE associe un type de fichier avec un programme. Assoc Associe une extension de fichier avec le type de fichier spécifié via FTYPE. Par exemple: xxx

Cela apportera les entrées nécessaires au registre. Pour plus d'informations, tapez assoc /? ou ftype /? à l'invite de commande.


0 commentaires

3
votes

Utilisation de python: xxx pré>

associant une icône avec le type d'extension: p> xxx pré>

enregistre l'extension en tant que type exécutable (pathext ): P>

def refreshEnvironment():        
    HWND_BROADCAST      = 0xFFFF
    WM_SETTINGCHANGE    = 0x001A
    SMTO_ABORTIFHUNG    = 0x0002
    sParam              = "Environment"

    import win32gui
    res1, res2          = win32gui.SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, sParam, SMTO_ABORTIFHUNG, 100)


0 commentaires