visual studio para imagenes iconos icono ejecutable cambiar botones agregar c# .net icons .net-assembly

c# - para - visual studio 2017 icons



Agregando múltiples iconos(Win32-Resource) a la aplicación.NET (5)

Acabo de crear una herramienta simple para hacer exactamente esto sin tener que meterme con los archivos .res. 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 tiene una carpeta de iconos en su carpeta de proyecto principal, puede agregar el siguiente evento posterior a la compilación:

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

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

es posible configurar el ícono de aplicación en las propiedades del proyecto. Si haces esto, el exe tendrá este icono en lugar del predeterminado. este icono es un recurso de win32 y también se puede acceder de esta forma:

Quiero tener iconos especiales para los tipos de archivo que utiliza mi programa. para asociar un icono de tipo de archivo puedo especificarlo en el registro ("MyProg.exe, 1" en la clave "DefaultIcon").

Entonces, ¿cómo AGREGAR MÁS íconos al ensamblaje que puedo usar para la asociación de tipo de archivo?

muchas gracias

ps: es una aplicación WPF (.NET 4.0)


Basado en las respuestas que veo, parece ser bastante trivial, pero desafortunadamente no es tan simple.

Comencemos desde el archivo .rc: puede escribir rápidamente un archivo como este: myown.rc:

1 ICON "..//Folder1//icon1.ico" 2 ICON "..//folder2//icon2.ico" 1 24 "myown.manifest"

Pero la siguiente pregunta es dónde obtener el archivo de manifiesto que necesita para su aplicación.

Es posible extraer el archivo de manifiesto utilizado actualmente, utilizando la línea de comandos como esta:

mt -inputresource:myOwnNetExe.exe;#1 -out:myown.manifest

Y luego puedes usar ese manifiesto con tu ejecutable .net.

Pero esto no es todo. Desde el proyecto en sí no puede especificar la ruta relativa a su archivo .res, puede usar solo la ruta absoluta. Guarde .csproj y edítelo manualmente con el bloc de notas para que la ruta sea relativa. Proyecto compila bien después de eso.

Pero en svn / git, es probable que no coloque el archivo .res, solo el código fuente. Necesidad de compilar .rc a .res.

Mejor hacerlo en proyecto / paso previo a la construcción.

Pero, por supuesto, rc.exe no se puede iniciar, ya que es un proyecto C ++, y tenemos un proyecto C # que no se preocupa por los parches del proyecto C ++.

Esto se puede solucionar mediante pasos de preconstrucción como este:

cd $(ProjectDir) call "%VS100COMNTOOLS%/vsvars32.bat" >nul rc /c 1252 /nologo myown.rc

Donde necesita cambiar VS100COMNTOOLS con Visual Studio con el que está compilando (estoy usando Visual Studio 2010).

Y esto todavía no es todo. Si desea cambiar el ícono de su aplicación en tiempo de ejecución, puede que le interese el código snipet como este:

[DllImport("shell32.dll")] public static extern IntPtr ExtractIcon(IntPtr hInst, string file, int nIconIndex); [DllImport("user32.dll", SetLastError = true)] static extern bool DestroyIcon(IntPtr hIcon); /// <summary> /// Sets icon from .exe or .dll into form object /// </summary> /// <param name="iIconIndex">Icon index to use.</param> /// <param name="form">Form to assign to given icon</param> /// <returns>true if ok, false if failed.</returns> bool SetIcon( object form, int iIconIndex, String dllOrExe = null ) { if( dllOrExe == null ) dllOrExe = System.Reflection.Assembly.GetExecutingAssembly().Location; IntPtr hIcon = ExtractIcon(IntPtr.Zero, dllOrExe, iIconIndex); if( hIcon == IntPtr.Zero ) return false; Icon icon = (Icon) Icon.FromHandle(hIcon).Clone(); DestroyIcon(hIcon); form.GetType().GetProperty("Icon").SetValue(form, icon); return true; }

Donde en form_load puedes colocar la llamada de esta manera:

SetIcon(this, N);

Donde N = 0 para el primer icono, N = 1 - para el segundo y así sucesivamente.

18.5.2016 Actualizar Mi enfoque funciona bien; sin embargo, después de las propiedades de este archivo de ensamblaje, la información de la versión desaparece. Es posible restaurarlo de nuevo utilizando el archivo .rc típico de C ++, pero desafortunadamente para mí, entonces rompe los atributos del ensamblaje de alguna manera: el administrador de tareas mostrará su exe como "Aplicación". Intenté profundizar un poco más si es posible alterar de alguna manera el manifiesto / título de la aplicación, pero sin ningún resultado. Después de eso, también terminé usando la solución InsertIcons.exe propuesta aquí.

Entonces, si no está interesado en la información de la versión del archivo, puede usar mi solución, si necesita la versión del archivo y el administrador de tareas debe mostrar su aplicación correctamente, use InsertIcons.exe. El snipet de código C # (SetIcon) aquí funcionará para usted en cualquier solución.


Si accedes a la configuración de tu proyecto, verás una forma de configurar el ícono para la aplicación.

Para agregar iconos adicionales ...

  • Haga clic con el botón derecho del ratón en el Proyecto en el Explorador de soluciones y elija Nuevo elemento y luego Archivo de recursos
  • Haga doble clic en el archivo de recursos en el explorador de soluciones y seleccione Agregar recurso -> Nuevo icono

Usé el enfoque InsertIcons con éxito hasta que Symantec anti virus comenzó a marcar mi exe como sospechoso. Mi conjetura es que a Symantec no le gustó el cambio en la firma que viene con el desorden con el exe como un paso posterior a la construcción.

Al final, fui con una biblioteca de clases dll de .NET compilada utilizando el siguiente código en el archivo csproj:

<PropertyGroup> <Win32Resource>icons.res</Win32Resource> </PropertyGroup>

No necesita tener instaladas las herramientas de compilación de c ++, pero sí necesita un compilador de recursos como se describe en la respuesta aceptada anteriormente.

Mi archivo icons.rc se ve así:

1 ICON "IconA.ico" 2 ICON "IconB.ico" 3 ICON "IconC.ico"

Y el comando de precompilación es:

"C:/Program Files (x86)/Windows Kits/8.1/bin/x86/rc.exe" $(ProjectDir)icons.rc


Windows no sabe nada acerca de los recursos administrados, necesita agregar recursos no administrados a su ejecutable. En la captura de pantalla de Parapura, debe seleccionar el botón de opción Resource file . Eso requiere un archivo .res, un archivo binario que se crea al ejecutar la herramienta rc.exe del SDK de Windows en un archivo .rc. El archivo .rc es un archivo de texto simple que contiene declaraciones de recursos, similar a esto:

1 ICON "mainicon.ico" 2 ICON "alternative1.ico" 3 ICON "alternative2.ico" 1 24 "app.manifest"

Asegúrese de guardar este archivo en la carpeta de su proyecto sin la codificación utf-8, lo mejor es usar el Bloc de notas. Cree el archivo app.manifest requerido con Project + Add New Item, Application Manifest File. Agregue este archivo .rc a su proyecto con Proyecto + Agregar elemento existente. Haga doble clic en él y verifique que pueda ver los iconos y el manifiesto. Haga clic con el botón derecho en el nodo superior, Agregar recurso y haga clic en Versión + Nuevo. Edite la información de la versión, tenga cuidado de que ya no coincidirá automáticamente con los atributos en AssemblyInfo.cs

Puede compilar el archivo .rc en un archivo .res con el indicador de comandos de Visual Studio:

rc /r something.rc

Lo que produce el archivo .res que puede usar en la pestaña de propiedades del proyecto. Hacer esto es un evento previo a la construcción es recomendable, pero un poco difícil de hacer bien. La cantidad de formas en que esto puede salir mal son numerosas, buena suerte.