Embed multiple icons in WPF EXE
c#, icons, wpf, xaml
Solution
I have found one solution! It's not perfect but it does what I want! As I used very long Scandinavian nights to find the solution, I feel that I have to share it here.
Here's what I did:
1) Wrote a dumb console C# app.
class ResTest {
static void Main() {
System.Console.WriteLine("Hello World!");
}
}
2) Did a simple `csc restest.cs` to test that my code worked.
3) Opened Notepad and wrote the following in a file I dubbed `App.rc`.
101 ICON "Application.ico"
102 ICON "Document.ico"
103 ICON "Help.ico"
4) Ran `rc /v App.rc`, the Resource Compiler. A new file, `App.res` had appeared.
5) Reran `csc` but this time:
csc /win32res:App.res restest.cs
6) `restest.exe` had now the icon with the ID of 101 and I could find the two other icons in Axialis IconWorkshop.
Now, I noticed that my assembly information (version, product name, blah blah blah) had disappeared. I googled `VS_VERSION_INFO` and came about MSDN's article about the VERSIONINFO structure which in RC files defines the attributes I need.
I would have preferred a more 'automated' method, but I must do what I can using the C# Express and the Windows Vista SDK.
-- Hope that you can use this...
Problem
I have a WPF assembly in which I would like to embed five icons for different filetypes associated with my application. How can I embed these icons into my EXE? @smoore @Groky @ChrisF, thank you. Unfortunately, this is not what I asked. I see that my question was quite vague 0_°. Let me rephrase the question: I have icons, say `Application.ico`, `Document.ico`, etc. as resources in my WPF projects. I access these icons in most cases with the following: ``` <Image Source="/MyAssembly;component/Resources/Icons/Application.ico" /> ``` That works every single time. I know that. What my question is about is how can I use the same icons from Windows Explorer for file associations in the registry. I want to be able to access the icons with a path like: ``` C:\Program Files\MyApp\MyApp.exe,1 ``` Like in how icons are associated with filetypes in `HKEY_CLASSES_ROOT`. AFAIK, I should use a resource file (`.rc`), compile and merge it with my EXE. Something along the lines of: ``` 101 RT_ICON Application.ico 102 RT_ICON Document.ico // etc... ``` Is this the right way in WPF? Is there an alternative, especially since this method seems to lead to the erasure of the assembly version from my `AssemblyInfo.cs`. I am still prepared to have to write the versioning info in the resource instead of the assembly's info.