Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Resource Extraction Tool
egrath
myCSharp.de - Member

Avatar #avatar-2119.jpg


Dabei seit:
Beiträge: 937
Herkunft: Österreich / Steyr

Themenstarter:

Resource Extraction Tool

beantworten | zitieren | melden

Hallo,

da ich heute ein Tool gebraucht habe um Resourcen aus einer Assembly zu extrahieren hab ich kurz was zusammengehackt welches dies bewerkstelligt. Ist zwar kein wirkliches Projekt, aber vielleicht kann jemand das sonst noch brauchen.

(Achtung: quick'n'dirty Style, also nix besonderes erwarten ;-)


using System;
using System.Collections;
using System.Reflection;
using System.IO;
using System.Resources;
using System.Drawing;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

namespace ResReader
{
    class Program
    {
        static void Main( string[] args )
        {
            if( args.Length ≤ 0 )
            {
                Console.Out.WriteLine( "illegal params" );
                System.Environment.Exit( -1 );
            }

            Assembly resAssembly = null;
            try
            {
                resAssembly = Assembly.LoadFrom( args[0] );
            }
            catch( Exception e )
            {
                Console.Out.WriteLine( e.ToString() );
                System.Environment.Exit( -1 );
            }

            Stream resStream = null;
            foreach( string resName in resAssembly.GetManifestResourceNames() )
            {
                Console.Out.WriteLine( "Resource: {0}", resName );
                resStream = resAssembly.GetManifestResourceStream( resName );
                Console.Out.WriteLine( "   Length: {0}", resStream.Length );

                
                ResourceReader reader;
                try
                {
                    reader = new ResourceReader( resStream );
                }
                catch( ArgumentException )
                {
                    Console.Out.WriteLine( "Exception catched: Stream is not a valid Resource" );
                    reader = null;
                }

                if( reader != null )
                {
                    IDictionaryEnumerator id = reader.GetEnumerator();
                    while( id.MoveNext() )
                    {
                        string resourceType;
                        byte[] resourceData = new byte[resStream.Length];
                        reader.GetResourceData( id.Key.ToString(), out resourceType, out resourceData );
                        Console.Out.Write( "      {0} : {1}; Len = {2} ", id.Key, id.Value, resourceData.Length );

                        Stream resourceStream = new MemoryStream( resourceData );
                        BinaryFormatter formatter = new BinaryFormatter();
                        
                        string outFileName = String.Empty;
                        if( id.Value != null && id.Value.ToString() == "System.Drawing.Bitmap" )
                        { 
                            // Image Resources are saved to BMP
                            outFileName = String.Format( "{0}.{1}", id.Key, "bmp" );
                            Console.Out.WriteLine( "=> {0}", outFileName );

                            Bitmap outBitmap = ( Bitmap ) formatter.Deserialize( resourceStream );
                            outBitmap.Save( outFileName, System.Drawing.Imaging.ImageFormat.Bmp );
                        }
                        else
                        {
                            // Other Resources are currently not handled
                            outFileName = id.Key.ToString() + ".unknown";
                            Console.Out.WriteLine( "=> {0} (not saved)", outFileName );
                        }                    
                                        
                    }
                }
            }
        }
    }
}

Grüsse, Egon

/edit: Noch ne kleine Änderung gemacht
private Nachricht | Beiträge des Benutzers