2009-12-02 32 views
7

Tengo un ensamblaje WPF en el que me gustaría insertar cinco iconos para diferentes tipos de archivos asociados con mi aplicación. ¿Cómo puedo insertar estos íconos en mi EXE?Insertar varios iconos en WPF EXE

@smoore @Groky @ChrisF, gracias. Lamentablemente, esto no es lo que pregunté. Veo que mi pregunta fue bastante vaga 0_ °. Permítame rehacer la pregunta:


tengo iconos, dicen Application.ico, Document.ico, etc. como recursos en mis proyectos de WPF. Puedo acceder a estos iconos en la mayoría de los casos con la siguiente:

<Image Source="/MyAssembly;component/Resources/Icons/Application.ico" /> 

que funciona cada vez. Yo sé eso.


Mi pregunta es acerca de cómo puedo usar los mismos iconos de Windows Explorer para asociaciones de archivos en el registro. Quiero ser capaz de acceder a los iconos con una ruta como:

C:\Program Files\MyApp\MyApp.exe,1 

Al igual que en la forma de iconos están asociados con tipos de archivos en HKEY_CLASSES_ROOT.

AFAIK, debería usar un archivo de recursos (.rc), compilarlo y unirlo con mi EXE. Algo similar a:

101 RT_ICON Application.ico 
102 RT_ICON Document.ico 
// etc... 

¿Es esta la manera correcta en WPF? ¿Hay alguna alternativa, especialmente porque este método parece conducir a la eliminación de la versión de ensamblaje de mi AssemblyInfo.cs? Todavía estoy preparado para tener que escribir la información de versión en el recurso en lugar de la información del ensamblado.

Respuesta

4

He encontrado una solución ! ¡No es perfecto, pero hace lo que quiero! Como utilicé noches escandinavas muy largas para encontrar la solución, siento que tengo que compartirla aquí.

Aquí es lo que hice:

1) escribió una consola de C# aplicación mudo.

class ResTest { 
    static void Main() { 
     System.Console.WriteLine("Hello World!"); 
    } 
} 

2) realizó un sencillo csc restest.cs para probar que mi código funcionó.

3) Abrí el Bloc de notas y escribí lo siguiente en un archivo que llamé App.rc.

101 ICON "Application.ico" 
102 ICON "Document.ico" 
103 ICON "Help.ico" 

4) Ran rc /v App.rc, la Resource Compiler. Apareció un nuevo archivo, App.res.

5) reran csc pero esta vez:

csc /win32res:App.res restest.cs 

6) restest.exe tenían ahora el icono con el ID de 101 y pude encontrar a los otros dos iconos en Axialis IconWorkshop.


Ahora, me di cuenta de que mi información de ensamblado (versión, nombre del producto, bla, bla, bla ) habían desaparecido. Busqué en Google VS_VERSION_INFO y encontré el artículo de MSDN sobre la estructura VERSIONINFO que en los archivos RC define los atributos que necesito.

Hubiera preferido un método más 'automático', pero debo hacer lo que pueda usando el C# Express y el SDK de Windows Vista.

- La esperanza de que se puede utilizar este ...

2

Propiedades del proyecto -> Recursos -> Agregar recurso -> Agregar nuevo icono/Agregar archivo existente (en función de si o no que ya ha hecho el icono)

1

Además de añadir los archivos a los recursos del proyecto , puede agregar los archivos a su proyecto y establecer su Acción de compilación en el recurso.

A continuación, puede consultar los archivos de XAML utilizando la propiedad Fuente. Por ejemplo, un archivo en un directorio Icon.png "Recursos" sería cargado usando:

<Image Source="/Resources/Icon.png"/> 

Y para cargar el archivo de código se debería utilizar:

new BitmapImage(new Uri(@"pack://application:,,,/Resources/Icon.png")) 
3
  1. Crear App.rc:

    101 ICON "Application.ico" 
    102 ICON "Document.ico" 
    103 ICON "Help.ico" 
    
  2. Compilar:

    rc App.rc 
    
  3. Añadir a su App.res proyecto (deje None como su acción de compilación).
  4. Compilación.

¡Todo listo!

+0

Gracias, que es mi responde exactamente – Minustar

+2

Bueno, no exactamente. El mío usa algunos Visual Studio ... –

2

Acabo de crear una herramienta simple para hacer exactamente esto sin tener que meterme con los archivos .res. (Si gestiona sus propios archivos .res, no obtendrá un manifiesto y el recurso de versión se creará automáticamente). Es una pequeña utilidad que puede usar como parte de su evento Post-Build y le permite agregar todos los archivos de iconos en una carpeta particular a su ensamblaje. Si asumimos que usted tiene una carpeta de iconos en su carpeta de proyecto principal puede agregar el siguiente evento posterior a la generación:

C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons 

Una descripción más detallada y una descarga se puede encontrar en http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/

Cuestiones relacionadas