Ecco alcuni esempi di codice che grosso modo ottenere questo risultato, meno controllo degli errori di qualsiasi tipo. Inoltre, assicurarsi che la licenza del programma da incorporare consenta questo tipo di utilizzo.
// extracts [resource] into the the file specified by [path]
void ExtractResource(string resource, string path)
{
Stream stream = GetType().Assembly.GetManifestResourceStream(resource);
byte[] bytes = new byte[(int)stream.Length];
stream.Read(bytes, 0, bytes.Length);
File.WriteAllBytes(path, bytes);
}
string exePath = "c:\temp\embedded.exe";
ExtractResource("myProj.embedded.exe", exePath);
// run the exe...
File.Delete(exePath);
L'unica parte difficile è ottenere il giusto valore per il primo argomento a ExtractResource
. Dovrebbe avere la forma "namespace.name", dove namespace è lo spazio dei nomi predefinito per il tuo progetto (trova questo sotto Project | Properties | Application | Default namespace). La seconda parte è il nome del file, che dovrai includere nel tuo progetto (assicurati di impostare l'opzione di compilazione su "Risorsa incorporata"). Se metti il file in una directory, ad es. Risorse, quindi quel nome diventa parte del nome della risorsa (ad esempio "myProj.Resources.Embedded.exe"). Se hai problemi, prova ad aprire il tuo binario compilato in Reflector e cerca nella cartella Risorse. I nomi elencati qui sono i nomi che si passerebbero a GetManifestResourceStream
.
La domanda è: che cosa si vuole con quel "eseguibile esterno"? se solo lo si incorpora e lo si estrae, quando "Risorsa incorporata" – tofi9
E se si tratta solo di "eseguirlo e ottenere l'output", quindi distribuirlo parallelamente. Non c'è bisogno che sia incorporato. Allo stesso modo del file Flash, il tuo _could_ lo distribuisca con il tuo programma, se è tutto ciò di cui hai veramente bisogno. Sospetto che tu abbia altri ** bisogni ** che non ti sei preso la briga di elencare. :) –