Я компилирую софт через CodeDomCompiler, и добавляю файл в ресурсы этого софта. Но я не знаю как прочитать этот ресурсный файл. Я пытался вот так: byte[] fat = Properties.Resources.NameProg;
Но ничего не получалось. Было написано, что Properties не найдено.
Сохранить бинарник из ресурсов на диск:
File.WriteAllBytes(@"C:\NameProg.exe", ProjectName.Properties.Resources.NameProg);
или так:
File.WriteAllBytes(@"C:\NameProg.exe", Resources.NameProg);
если наверху есть:
using ProjectName.Properties;
где:
ProjectName - название Вашего проекта;
Имейте в виду, что:
- в проекте может быть несколько файлов ресурсов. В примере выше данные берутся из "Resources";
- для записи в некоторые папки нужно запускать программу с правами администратора;
- могут срабатывать антивирусы и удалять свежесозданный exe.
У меня этот ехешник расшифровывается и запускается в памяти. Записывать на диск, думаю, худший вариант. Мне важно добраться до самого файла (!). А дальше извлечь байты, расшифровать их и запустить в памяти.
Мне либо надо получить имя проекта и по нему перейти в Properties Resources, либо каким-то другим способом. Просто надо получить байты этого файла в ресурсах. Без записи на диск.
BasiC2k, Угу. Щас попробую с помощью source.Replace ставить выходное имя софта в самом коде и заменять строки. Если все получится, поставлю как решение :)
reversedebil, хм, Вы пишете в начале, что в ресурсах у Вас exe (это byte[]), а в коде из последнего сообщения извлекаете из ресурсов string
Так что там у Вас? )
BasiC2k, Я еще попробовал такую функцию, но она что-то тоже не работает :/
public static byte[] ReadResource(string resourceName)
{
using (System.IO.Stream s = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
byte[] buffer = new byte[1024];
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
while (true)
{
int read = s.Read(buffer, 0, buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write(buffer, 0, read);
}
}
}
}