[C#] Executer assembly indépendamment

Résolu/Fermé
kelsett Messages postés 353 Date d'inscription dimanche 9 juillet 2006 Statut Membre Dernière intervention 13 octobre 2014 - 19 juil. 2010 à 13:46
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 - 20 juil. 2010 à 12:52
Bonjour,

J'ai un executable à partir duquel j'execute une assembly, seulement cette assembly requiert l'executable principal pour continuer à fonctionner... ce que j'aimerai faire c'est justement rendre l'assembly indépendante sans avoir besoin du launcher...

J'ai cherché des heures sans trouver de solution satisfaisante, le seul moyen que j'ai trouvé est d'injecter le code dans un autre processus, seulement je n'y suis pas parvenu (il semble qu'en C# ce soit très difficile).

Pourriez vous m'aider à résoudre ce problème? Merci d'avance :)

5 réponses

Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
19 juil. 2010 à 13:47
Que veux-tu dire par "Exécuter une assembly"? un petit exemple du code, de tes classe, etc... pourrait aider.
0
kelsett Messages postés 353 Date d'inscription dimanche 9 juillet 2006 Statut Membre Dernière intervention 13 octobre 2014 62
Modifié par kelsett le 19/07/2010 à 13:58
// Mon assembly 
Assembly loAssembly; 
... 

// Je crée une nouvelle instance de celle ci à partir de son namespace + classe 
object loObject = loAssembly.CreateInstance("Namespace.Class"); 

... 

// J'appelle l'assembly à partir de son point d'entrée 
loObject.GetType().InvokeMember("Main", BindingFlags.InvokeMethod, null, loObject, loCodeParms); 
0
kelsett Messages postés 353 Date d'inscription dimanche 9 juillet 2006 Statut Membre Dernière intervention 13 octobre 2014 62
19 juil. 2010 à 17:32
Petit up?
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
19 juil. 2010 à 17:42
je ne vais pas commenter sur l'utilité de faire une "assembly" avec des points d'entrées pour l'appeller, tu devais avoir tes raisons de vouloir faire ca.


quoi qu'il en soit, il faut, un éxécutable qui appelle ce point d'entrée. Le moyen le plus simple est de créer un simple exécutable en mode console (ou fenetré, ton choix) qui appelle ce point d'entrée.

il y a aussi la méthode "rundll" qui pourrait fonctionner, mais cela fait un moment que je ne l'ai pas utilisé, encore moins sur une assembly .NET, mais cela permet l'invocation d'une méthode dans une DLL.

petits exemple de rundll32:
http://www.walkernews.net/2007/06/06/quick-start-to-rundll32-syntax-and-example/
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
19 juil. 2010 à 17:45
arg, je viens de trouver un article chez microsoft qui dit que rundll ne fonctionne pas avec le code .NET, donc ignore mon commentaire sur RunDLL, et code toi un petit programme autonome, que tu peux rajouter à ta solution a coté du projet de ton assembly et qui ne fera rien d'autre qu'appeler le point d'entrée.
0
kelsett Messages postés 353 Date d'inscription dimanche 9 juillet 2006 Statut Membre Dernière intervention 13 octobre 2014 62
19 juil. 2010 à 18:05
-> l'utilité de l'assembly, c'est parce que juste avant dans le code je compile à la volée un bout de code bien défini, et que mon but est d'exécuter ce bout de code directement en mémoire, ce que j'ai réussi à faire sans trop de problème, maintenant ce que je tente de faire c'est que ce bout de code exécuté en mémoire parvienne à supprimer l'exécutable qui l'a généré...
Et justement j'essaie d'éviter d'utiliser un autre programme, je trouve ca barbare :D N'y a t'il donc aucun moyen d'appeler l'assembly puis de la laisser s'exécuter sans le programme l'ayant appelé?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
20 juil. 2010 à 12:52
>N'y a t'il donc aucun moyen d'appeler l'assembly puis de la laisser s'exécuter sans le programme l'ayant appelé?

non.

une assembly, ou plus généralement une DLL ne peut pas s'exécuter sans que quelque chose lui fasse un appel.
cette appel peut être fait en multi thead, le "main" de ton assembly peut contenir une boucle qui ne sort jamais, le process appelant peut se terminer et se fermer

mais l'appel sera toujours fait par un programme.

tu pourrais à la limite utiliser du powershell et appeler ton assembly depuis powershell, ca a l'avantage de ne pas être compilé, et tu peux invoquer des fonction d'une assembly a la volée.
0