2012-03-19 7 views
6

Vorremmo offrire ai nostri clienti la possibilità di creare exe personalizzati, basati sui nostri, per i loro clienti.Crea copia di exe con risorse diverse in fase di esecuzione

cioè, fondamentalmente la capacità di fare una copia di un exe con un diverso file di configurazione XML incorporato in esso. Il "includerlo nell'installazione" non è un'opzione - vogliamo che questo sia personalizzato per i client dei nostri clienti.

Attualmente sto pensando di scrivere una DLL in fase di runtime che includa la risorsa (utilizzando un AssemblyBuilder), quindi chiamare ILMerge per incorporarlo nell'exe finale, ma questo è leggermente più hacker di quanto vorrei.

Quindi è un alto chiedere, ma forse vale la pena chiedere comunque: esiste una libreria .NET che consente di modificare le risorse di un exe .NET che potrebbero evitare l'intero bit "dll in possesso di una risorsa incorporata da ILMerge"?

Oppure, in alternativa, c'è un approccio migliore per questo che soddisfa ancora gli obiettivi dichiarati?

risposta

2

Suona come un sacco di lavoro per sostituirlo una volta la sua già compilato. Lo farei con uno script di compilazione, un param e diversi file di risorse.

+0

Sarebbe questo non richiede dando al cliente il codice sorgente completo del progetto? – Mania

+0

no è necessario ottenere quali risorse si desidera sostituire e disporre di un file di risorse per ogni client. Memorizza tutte le tue risorse in una cartella diversa ex. ClientA ... ClientB e quando si sta costruendo per ClientA copia quel file di risorse da quella cartella prima di compilarlo –

+0

Nono, questo è per i client dei nostri clienti. Come in una volta rimosso. Il nostro cliente deve essere in grado di personalizzare il programma specifico per i propri clienti: diversi loghi, diverse opzioni, diversi termini. Tutto ciò è facilmente realizzabile tramite un documento XML, purtroppo al momento devo essere io a farlo. Vogliamo che il nostro cliente sia in grado di farlo. Leggermente più complicato. – Mania

0

Anche se non è l'approccio che prendo con questo problema, esiste una libreria che consente di modificare le risorse incorporate di un eseguibile compilato, Cecil.

Incorporare una risorsa con Cecil:

inclusioni di namespace:

using Mono.Cecil; // supports both net and mono 

incorporamento la risorsa:

static void Main(string[] args) 
    { 
     string pathToExecutable = "Target.exe"; 

     byte[] encoding = Encoding.Unicode.GetBytes("<Data><!-- data goes here --></Data>"); 

     var resource = new EmbeddedResource(
       "ConfigurationFile", 
       ManifestResourceAttributes.Private, 
       encoding); 

     var asm = AssemblyDefinition.ReadAssembly(pathToExecutable); 

     asm.Modules.FirstOrDefault().Resources.Add(resource); 

     asm.Write(pathToExecutable); 
    } 
Problemi correlati