Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embed multiple icons in WPF EXE

Tags:

c#

icons

wpf

xaml

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.

like image 527
Minustar Avatar asked Dec 02 '09 12:12

Minustar


1 Answers

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...

like image 151
Minustar Avatar answered Sep 21 '22 20:09

Minustar