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.
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...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With