When I was building "About" dialog for my applications, I wanted it to be as reusable as possible. That meant that all data should be retrieved while program is running. Only thing that I could not discover within .NET code was application's icon.
Windows API came to rescue. In short we just load our own assembly for purpose of extracting one icon resource. That gives us "good old" pointer which can be used to create bitmap.
IntPtr hLibrary = NativeMethods.LoadLibrary(Assembly.GetEntryAssembly().Location);
if (!hLibrary.Equals(IntPtr.Zero)) {
IntPtr hIcon = NativeMethods.LoadIcon(hLibrary, "#32512");
if (!hIcon.Equals(IntPtr.Zero)) {
Bitmap bitmap = Icon.FromHandle(hIcon).ToBitmap();
if (bitmap != null) { return bitmap; }
}
}
Probably most curious thing is "#32512" string. This is resource identifier that goes way back into non-CLR past (also-known-as IDI_APPLICATION constant) and it is not only one that can be used.
Here is full sample.