2010-04-06 3 views
0

J'essaie de créer une application peut modifier les propriétés dans IL pour créer un exécutable légèrement différent. E.g Client A exécute l'application et une étiquette sur l'étiquette WinForm Lit "Client A:". Le client B exécute l'application et Label indique "Client B". Facile Je sais utiliser des fichiers de configuration ou des fichiers de ressources, mais ce n'est pas une option pour ce projet. Le programme principal doit être capable de générer un fichier .exe dynamiquement en fonction de certains champs de formulaire saisis par l'utilisateur.ildasm et fichiers exe dynamiques

Ma solution était de créer un exécutable autonome qui contenait tous les éléments dont j'avais besoin pour rendre dynamique. J'ai ensuite utilisé ildasm pour générer l'IL et j'ai pensé que je pourrais utiliser cette IL et remplacer les tags pour les éléments que je voulais rendre dynamiques. Je pourrais alors remplacer ces étiquettes à l'exécution après que l'utilisateur ait rempli le formulaire en utilisant regex etc. Le problème est, le if est de sauvegarder le fichier IL généré par ILDASM comme un exe et essaie de l'exécuter. Je lance juste la console et ne fait rien.

Est-ce que je vais dans le mauvais sens? Je ne voulais pas plonger dans Reflection comme le .exe dynamique est un très simple et je pensais que le reverse engineering IL avec ildasm serait le moyen le plus rapide.

Vos pensées et vos conseils sont très appréciés. Tony

Répondre

0

L'exécutable est-il généré sur site? Ou générez-vous l'exécutable pour un client et expédiez le résultat? Si vous êtes celui qui génère l'exécutable, vous pouvez placer le code/données spécifique au client dans une DLL distincte et l'incorporer dans votre exécutable en tant que ressource, puis le charger lorsque l'événement AppDomain.CurrentDomain.AssemblyResolve se produit.

De cette façon, vous pouvez avoir un contrôle de version sur les données spécifiques au client.

+0

Salut, Bonne idée mais j'ai peur que l'exécutable devra être généré sur le site :( – TonyNeallon

+0

Je voudrais essayer d'éviter d'envoyer des données spécifiques aux clients à des clients auxquels il n'est pas destiné.En outre, laisser un client générer un son exécutable un peu fragile, et il semble qu'il serait impossible de déboguer si les choses tournent mal Si vous voulez modifier un exécutable, j'essayerais de remplacer les ressources embarquées au lieu de générer quoi que ce soit. qu'en est-il de leur envoyer une application de téléchargement qui récupère l'exécutable correct à partir d'un serveur Web? –

0

Lorsque vous dites "ré-enregistrer" le fichier créé par ildasm et l'exécuter voulez-vous dire que vous exécutez tous les fichiers IL à travers ilasm (le compilateur Microsoft IL fourni)? Si non, vous pouvez essayer cela. Soyez très prudent lorsque vous effectuez votre substitution car IL a des exigences très spécifiques et ilasm n'est pas aussi indulgent que les compilateurs de niveau supérieur comme csc et vbc.

Vous pouvez également utiliser Mono.Cecil pour modifier les fichiers d'assemblage. Ainsi, vous n'avez pas besoin de livrer IL à vos clients.

Si vous continuez sur la route de l'envoi de la source et de la compiler, vous pouvez accomplir la même chose sans impliquer IL en envoyant la source C# et en la compilant sur place car csc est incluse dans le framework.