Вот пример кода, который примерно достигнет этого, за исключением проверки ошибок любого рода. Кроме того, убедитесь, что лицензия на встраиваемую программу допускает такой вид использования.
// 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 );
Единственная сложная задача - получить правильное значение для первого аргумента ExtractResource
. Он должен иметь форму «namespace.name», где namespace является пространством имен по умолчанию для вашего проекта (найдите его в Project | Properties | Application | Default namespace). Вторая часть - это имя файла, который вам нужно будет включить в ваш проект (не забудьте установить опцию сборки на «Embedded Resource»). Если вы поместите файл в каталог, например, Ресурсы, затем это имя становится частью имени ресурса (например, «myProj.Resources.Embedded.exe»). Если у вас возникли проблемы, попробуйте открыть скомпилированный двоичный файл в Reflector и загляните в папку «Ресурсы». Имена, перечисленные здесь, являются именами, которые вы передадите GetManifestResourceStream
.