Я нашел эту статью и создал этот код (используя Mono.Cecil 0.6):
Код: Выделить всё
AssemblyDefinition asdDefinition = AssemblyFactory.GetAssembly("C:\\File.exe");
EmbeddedResource erTemp = new EmbeddedResource("encFile", ManifestResourceAttributes.Public);
erTemp.Data = myNewFileBytes;
asdDefinition.MainModule.Resources.RemoveAt(0);
asdDefinition.MainModule.Resources.Add(erTemp);
AssemblyFactory.SaveAssembly(asdDefinition, "C:\\newFile.exe");
Имя ресурса — encFile и сохраняется как encFile.exe (пробовал оба).
Я протестировал код, и удаление работает (я могу сказать по размеру файла), и добавление тоже, но новый файл аварийно завершает работу, как и файл, который я создал только с удалением (для тестирования) — он действует так, как будто он не вижу замененный ресурс.
Что можно сделать, чтобы это исправить? Может быть, какие-то изменения в редактируемом EXE-файле?
EXE-файл считывает свой ресурс так:
Код: Выделить всё
byte[] buffer = ProjectName.Properties.Resources.encFile;Подробнее здесь: https://stackoverflow.com/questions/692 ... mmatically
Мобильная версия