2010-03-04 12 views
7

Je sais que c'est une situation étrange, mais j'ai besoin d'intégrer un fichier EXE (ou le code d'assemblage) dans mon projet, donc il ne peut être démarré que par l'application (il peut ne créez pas le fichier EXE dans le système de fichiers et démarrez-le) ....NET: incorporer un fichier EXE dans mon projet

Est-ce possible?

Edit:

Ce n'est pas un EXE .NET. Quoi qu'il en soit, j'ai ajouté le fichier Test.exe comme ressource pour mon projet et je l'ai fait

Dim exestr As Stream = Nothing 
    Dim a As Assembly = Assembly.GetExecutingAssembly 
    exestr = a.GetManifestResourceStream("Test.exe") 
+0

Ce n'est pas possible. Pourquoi essayez-vous de faire cela? – SLaks

Répondre

2

Je pense créer un RAM disk, écrire votre fichier/s à partir de votre fichier de ressources. NET, et y exécuter le fichier. Rien ne touche le disque physique.

Je n'ai pas de lien pour une API de disque RAM programmable, mais vous pouvez probablement trouver quelque chose à manipuler à partir de votre programme. L'autre avantage est que les scanneurs de virus peuvent toujours le reconnaître pour des raisons de sécurité.

En outre, je pense que si votre application est en cours d'exécution sur le disque, il n'y a aucune raison pour laquelle l'exécutable en question ne peut pas être sur le disque aussi. Si vous le faites circuler sur le réseau (en le téléchargeant) ou quelque chose, puis enregistrez d'abord sur le disque et effacez le lorsque vous avez terminé l'exécution.

+0

merci, je vais essayer ça, en espérant fonctionne ... En tout cas je ne veux pas écrire et ouvrir le fichier parce que les utilisateurs ne devraient pas copier le second exe et le démarre quand ils le veulent. – Marcx

+0

Était-ce une solution de disque RAM à la fin? Juste curieux. Si oui, quel logiciel avez-vous utilisé pour l'implémenter? –

+0

Je pense que le problème est que les disques RAM nécessitent l'installation préalable d'un logiciel tiers. Lequel, si vous pouvez le faire, pourquoi ne pouvez-vous pas simplement écrire dans le système de fichiers? – jcmcbeth

4

Si le fichier EXE est un assemblage .Net, vous pouvez intégrer le binaire compilé dans votre programme (externe), la charge à l'aide Assembly.Load(byte[]). EDIT: Comme ce n'est pas le cas, vous ne pouvez pas. Après le chargement de l'assemblage, vous pouvez appeler des fonctions de l'assemblage interne (comme la méthode Main) comme n'importe quel autre assemblage, ou vous pouvez écrire AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName).

+0

mis à jour le premier message ... l'exe n'est pas .Net exe .. – Marcx

+0

Je vais garder cette réponse pour référence. – SLaks

+0

+1 pour les informations utiles. – si618

5

Impossible. Ce fut une décision de conception de base faite par Dave Cutler et co quand ils ont conçu Windows NT. Un processus doit être être soutenu par un fichier sur le système de fichiers. Windows utilise un fichier mappé en mémoire pour mapper le code du processus à la mémoire virtuelle. Ce n'est pas différent pour un programme .NET, même si une grande partie de son code obtient JIT compilé en mémoire. L'assembly qui contient l'IL est mappé de la même manière.

Bien au-delà du simple fonctionnement efficace du système d'exploitation, les utilisateurs et les antivirus n'aiment vraiment pas le code exécutable qui sort de nulle part.