Domanda

C'è qualcuno che sa come posso embedd un file exe in una DLL?

Ho uno strumento che è un file exe che io chiamo da codice C #.

Il fatto è che voglio avere 1 dll contenente questo strumento (file exe) e il dll containg mio codice C #.

E 'possibile embedd questo file exe nell'ambito delle risorse?

Thx in anticipo

È stato utile?

Soluzione

Certo che lo è. È possibile aggiungere qualsiasi file come RC_DATA in applicazione come risorsa. Ma credo che sarà necessario estrarre su disco prima di chiamarlo!

Quali IDE / lingua si sta utilizzando?

[EDIT]

Sorry! avete accennato che si sta utilizzando C #.

  1. Aggiungi un file di risorse per voi l'applicazione (tasto destro applicazione nella IDE e selezionare "Aggiungi nuovo elemento".
  2. Utilizzare la barra degli strumenti di editor di risorse per aggiungere un file esistente.
  3. Quindi estrarre il file exe quando richiesto chiamando il codice di qualcosa di simile a: System.IO.File.WriteAllBytes (@ "C: \ MyEXE \", Resource1.MyEXE);

Altri suggerimenti

Vale la pena tenendo in mente che i vostri usi potrebbero non essere troppo felice di te fare questo. Incorporare un eseguibile che hanno avuto alcun controllo su in una DLL che si estrarre ed eseguire probabilmente rendere le persone preoccuparsi della esecuzione di un Trojan sul proprio computer.

E 'meglio lasciare il .EXE nel filesystem ed essere trasparenti su ciò che l'applicazione sta facendo.

E 'possibile caricare un assembly da un byte []. Questo può essere ottenuto tramite la ManifestResourceStream di una risorsa incorporata.

Un'alternativa può essere quella di non incorporare l'exe in sé, ma piuttosto includere la sua funzionalità nella DLL e utilizzare Rundll32 [ 1 ] per eseguirlo.

Una nota a parte, ricordare che quando si tira un file da risorse su disco e quindi eseguire il codice su di esso, si può scatenare di Windows Data Execution Prevention - in pratica, Windows tenta di rilevare automaticamente se qualcosa si suppone che sia il codice oi dati, e se sembra che i dati (che sarebbe una risorsa), poi si impedisce che i dati vengano eseguiti come codice.

Questo diventa un problema particolarmente appiccicoso se il vostro assembly .NET sta per essere utilizzato su una rete anziché da un'unità locale -. Ci sono tutti i tipi di configurazioni di sicurezza .NET che potrebbero impedire questo di funzionare correttamente

Un'altra opzione, e non conoscendo i dettagli del progetto, prendere questo con un grano di sale: aggiungere un file .exe.readme alla vostra installazione che descrive a tutti gli utenti curiosi o personale IT per cui v'è un eseguibile weren' t aspetta nella directory di installazione:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top