[C#] Executer assembly indépendamment

Résolu
kelsett Messages postés 353 Date d'inscription   Statut Membre Dernière intervention   -  
Krysstof Messages postés 1489 Date d'inscription   Statut Membre Dernière intervention   -
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 :)
A voir également:

5 réponses

Krysstof Messages postés 1489 Date d'inscription   Statut Membre Dernière intervention   294
 
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   Statut Membre Dernière intervention   62
 
// 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   Statut Membre Dernière intervention   62
 
Petit up?
0
Krysstof Messages postés 1489 Date d'inscription   Statut Membre Dernière intervention   294
 
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 1489 Date d'inscription   Statut Membre Dernière intervention   294
 
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   Statut Membre Dernière intervention   62
 
-> 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 1489 Date d'inscription   Statut Membre Dernière intervention   294
 
>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