Enregistrement du type de fichier et de l'icône de document personnalisé dans .NET
Question
J'ai une application qui produit des fichiers. Je souhaite connecter ces fichiers à une application de sorte qu'un double-clic sur le fichier lance l'application.
Tout fonctionne correctement, sauf que le fait que l'icône ressemble à l'icône de mon application est gênant. J'aimerais avoir une icône pour l'application et une icône pour ses documents.
La valeur DefaultIcon dans le registre requiert " app.exe, 1 " syntaxe où 1 est index d'icône. Il semble que les ressources .NET ne soient pas des ressources Win32.
J'ai essayé de suivre mais sans succès:
- Sélection de " ressource incorporée " comme action de construction du fichier.
- Ajout d'une icône au fichier de ressources.
La seule chose qui a fonctionné est d'avoir un fichier d'icône séparé de l'exécutable et de le pointer dessus. Cependant, cela me semble être une capitulation.
Des idées pour résoudre ce problème?
La solution
Avez-vous essayé de définir 2 comme index d'icône?
EDIT: J'ai trouvé un moyen, mais vous devez le refaire à chaque nouvelle construction.
- Ouvrez le fichier .exe dans Visual Studio (Fichier - > Ouvrir le fichier)
- Cliquez avec le bouton droit sur le dossier des icônes et sélectionnez Ajouter une ressource
- Cliquez sur le bouton Importer
- Sélectionnez votre fichier .ico
- Vous devrez peut-être manipuler les numéros d'icône. Je pense que le numéro le plus bas (exemple 101) sera l'icône de l'application
- Mémorisez le nouveau numéro d'icône et définissez-le comme index
EDIT 2: Essayez cet article: http://www.codeproject.com/KB/dotnet/embedmultipleiconsdotnet. aspx
Autres conseils
Si vous utilisez l'ensemble d'outils Wix ( http://www.wixtoolset.org ) pour installer votre application. , vous pouvez demander à Wix de s’occuper du type de fichier et de l’enregistrement de l’icône du document
Voici mon incantation magique Wix:
<!-- Your executable -->
<File
Id="MaAppExe"
Name="MyApp.exe"
Source="MyApp.exe" KeyPath="yes" >
</File>
<!-- your document icon -->
<File
Id='IconMyAppDoc.ico'
Name='IconMyAppDoc.ico'
Source='$(var.MyApp.ProjectDir)\Resources\Images\Icons\docicon.ico' />
<-- File Extension and associated document icon -->
<ProgId
Id='MyApp.MyAppExtension'
Description='My App Data File'
Icon='IconMyAppDoc.ico'>
<Extension
Id='MyApp'
ContentType='text/plain'>
<Verb
Id='open'
Command='Open'
TargetFile="MyAppExe"
Argument='"%1"' />
</Extension>
</ProgId>
</Component>
DefaultIcon
acceptera également le chemin d'accès à un fichier .ico valide en tant qu'icône.
Vous devez vous assurer que votre projet contient des icônes Win32 et pas seulement des icônes .net. J'espère que quelqu'un indique un moyen facile de le faire, mais en attendant, voici ...
Compilez votre assemblage, puis dans Visual Studio, sélectionnez "Fichier - > Ouvrir - > Ouvrir le fichier " ;, ouvrez l'assembly compilé. Ajoutez l'icône que vous souhaitez utiliser pour les documents et définissez son ID sur une valeur supérieure à celle utilisée pour votre application. Enregistrez l'assemblage. Vous disposez maintenant de ressources Win32.
- Éditer -
Après avoir publié son article, ZippyV semble avoir une très bonne réponse.