2009-12-02 18 views
7

Ho un assembly WPF in cui vorrei incorporare cinque icone per diversi tipi di file associati alla mia applicazione. Come posso incorporare queste icone nel mio EXE?Incorpora più icone in WPF EXE

@smoore @Groky @ChrisF, grazie. Sfortunatamente, questo non è quello che ho chiesto. Vedo che la mia domanda era piuttosto vaga 0_ °. Mi permetta di riformulare la domanda:


ho icone, dicono Application.ico, Document.ico, ecc come risorse nei miei progetti di WPF. Accedo a queste icone nella maggior parte dei casi con il seguente:

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

Che funziona ogni volta. Lo so.


Di cosa si tratta è come è possibile utilizzare le stesse icone di Esplora risorse per le associazioni di file nel Registro di sistema. Voglio essere in grado di accedere alle icone con un percorso simile:

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

Come nel modo in cui le icone sono associate a tipi di file in HKEY_CLASSES_ROOT.

AFAIK, dovrei usare un file di risorse (.rc), compilarlo e unirlo con il mio EXE. Qualcosa sulla falsariga di:

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

È questo il modo giusto in WPF? C'è un'alternativa, soprattutto perché questo metodo sembra portare alla cancellazione della versione di assemblaggio dal mio AssemblyInfo.cs. Sono ancora pronto a scrivere le informazioni sulla versione nella risorsa invece delle informazioni dell'assembly.

risposta

4

Ho trovato una soluzione ! Non è perfetto ma fa quello che voglio! Poiché ho usato notti scandinave molto lunghe per trovare la soluzione, sento che devo condividerlo qui.

Ecco quello che ho fatto:

1) ha scritto un muto console C# app.

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

2) ha fatto un semplice csc restest.cs per verificare che il mio codice ha funzionato.

3) Blocco note aperto e ha scritto quanto segue in un file che ho soprannominato App.rc.

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

4) Ran rc /v App.rc, il Resource Compiler. Un nuovo file, App.res era apparso.

5) reran csc ma questa volta:

csc /win32res:App.res restest.cs 

6) restest.exe aveva ormai l'icona con l'ID del 101 e sono riuscito a trovare le altre due icone in Axialis IconWorkshop.


Ora, ho notato che le mie informazioni di montaggio (versione, nome del prodotto, bla bla bla ) erano scomparsi. Ho cercato su google VS_VERSION_INFO e ho scoperto l'articolo di MSDN sulla struttura VERSIONINFO che nei file RC definisce gli attributi di cui ho bisogno.

Avrei preferito un metodo più "automatizzato", ma devo fare quello che posso utilizzando C# Express e Windows Vista SDK.

- La speranza che è possibile utilizzare questo ...

2

Proprietà progetto -> Resources -> Aggiungi risorsa -> Aggiungi nuova icona/Aggiungi file esistente (a seconda se o non hai già fatto l'icona)

1

Oltre ad aggiungere i file alle vostre risorse di progetto , puoi aggiungere i file al tuo progetto e impostare la loro azione Build su risorsa.

È quindi possibile fare riferimento ai file da XAML utilizzando la proprietà Origine. Per esempio un file Icon.png in una directory "Risorse" sarebbe stato caricato utilizzando:

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

E per caricare il file dal codice si usa:

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

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

    rc App.rc 
    
  3. Aggiungi alla tua App.res project (lascia None come Build Action).
  4. Build.

Tutto fatto!

+0

Grazie, questo è il mio rispondi esattamente – Minustar

+2

Beh, non esattamente. Il mio utilizza alcuni Visual Studio ... –

2

Ho appena creato un semplice strumento per fare esattamente questo senza dover rovinare file .res. (Se gestisci i tuoi file .res, non otterrai una risorsa manifest e versione creata automaticamente). È una piccola utility che puoi usare come parte dell'evento Post-Build e ti consente di aggiungere tutti i file di icone in una particolare cartella all'assembly. Se si assume che si dispone di una cartella di icone nella cartella di progetto principale è possibile aggiungere il seguente evento di post-generazione:

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

Un ulteriore descrizione e un download può essere trovato alla http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/