2010-03-04 15 views
7

So che è una situazione strana, ma ho bisogno di incorporare un file EXE (o il codice assembly) nel mio progetto, quindi può essere avviato solo dall'applicazione (può creare l'EXE nel filesystem e avviarlo) ....NET: incorpora un file EXE nel mio progetto

È possibile?

Edit:

Non è un EXE .NET. In ogni caso ho aggiunto il file Test.exe come una risorsa per il mio progetto e ho fatto questo

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

Questo non è possibile. Perché stai provando a fare questo? – SLaks

risposta

2

sto pensando a creare un RAM disk, scrivere il file exe/s ad esso dal vostro file di risorse .NET, ed eseguire il file lì. Nulla tocca il disco fisico.

Non ho un collegamento per un'API del disco RAM programmabile ma è probabile che si possa trovare qualcosa da manipolare dal programma. L'altro vantaggio è che gli scanner antivirus possono ancora riconoscerlo per sicurezza.

Inoltre sto pensando se la tua app è in esecuzione su disco, quindi non c'è una buona ragione per cui l'eseguibile in questione non può essere anche su disco. Se lo stai collegando in rete (scaricandolo) o qualcosa del genere, allora il salva sul disco per primo e lo cancella quando viene eseguita l'esecuzione.

+0

grazie, ci provo, sperando che funzioni ... In ogni caso non voglio scrivere e aprire file perché gli utenti non dovrebbero copiare il secondo exe e inizia quando vogliono. – Marcx

+0

Alla fine era una soluzione disco RAM? Solo curioso. Se sì, quale software hai usato per implementarlo? –

+0

Penso che il problema con questo sia che i dischi RAM richiedono già l'installazione di software di terze parti. Che se riesci a farlo perché non puoi semplicemente scrivere sul filesystem? – jcmcbeth

4

Se il file EXE è un assembly .NET, è possibile incorporare il binario compilato nel programma (esterno), caricarla utilizzando Assembly.Load(byte[]). EDIT: Poiché non lo è, non è possibile.

Dopo aver caricato il gruppo, è possibile chiamare le funzioni dall'assieme interno (ad esempio il metodo Main) come qualsiasi altro assieme, oppure è possibile scrivere AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName).

+0

aggiornato il primo post ... l'exe non è .Net exe .. – Marcx

+0

Terrò questa risposta per riferimento. – SLaks

+0

+1 per le informazioni utili. – si618

5

Non possibile. Questa è stata una decisione progettuale di base fatta da Dave Cutler e Co quando hanno progettato Windows NT. Un processo deve essere supportato da un file nel file system. Windows utilizza un file mappato in memoria per mappare il codice del processo nella memoria virtuale. Questo non è diverso per un programma .NET, anche se molto del suo codice ottiene JIT compilato in memoria. L'assembly che contiene l'IL viene mappato allo stesso modo.

Buono per non solo un funzionamento efficiente del sistema operativo, gli utenti e gli antivirus non amano il codice eseguibile che salta fuori dal nulla.

Problemi correlati