Извлекается пустой файл после редактирования через dnlib
Аналогичная тема
Сейчас я решил попробовать изменять через dnlib библиотеку, использую такой метод для изменения ресурсов другого приложения:
namespace DnlibResEditor
{
using System.IO;
using System.Resources;
using dnlib.DotNet;
using DnlibResEditor.Properties;
public static class ResEdit
{
private static byte[] CreateByteResourceFileInMemory(string FileData)
{
// Создаю новый ресурс в памяти
using (var ms = new MemoryStream())
{
using (IResourceWriter Writer = new ResourceWriter(ms))
{
Writer.AddResource("Res", FileData);
Writer.Generate();
}
return ms.ToArray();
}
}
public static void Finished(string mod, string newmod)
{
using var module = ModuleDefMD.Load(mod); // Загрузка модуля
string resourceData = Resources.NewText; // Новый ресурс, который нужно добавить в другое приложение
if (module.IsILOnly) // Проверяем что загрузка приложения Net
{
module.Resources.Clear(); // Очищаем все ресурсы приложения
// добавляем новый ресурс
// "ResExtractor.Properties.Resources.resources" - namespace нового ресурса ( идентичного в приложении )
module.Resources.Add(new EmbeddedResource("ResExtractor.Properties.Resources.resources", CreateByteResourceFileInMemory(resourceData), ManifestResourceAttributes.Public));
module?.Write(newmod); // Запись в новый файл
}
}
}
}
Вызов:
namespace DnlibResEditor
{
using System;
using System.IO;
internal static class Program
{
private static readonly string CurrDir = Environment.CurrentDirectory;
public static void Main(string[] args)
{
string module = Path.Combine(CurrDir, "ResExtractor.exe");
string new_Module = Path.Combine(CurrDir, "NewRes.exe");
ResEdit.Finished(module, new_Module);
}
}
}
Вопрос: Как извлечь корректный файл после изменения ресурса программы через dnlib ?
После запуска файла (изменённого, файл из ресурсов достаётся, но он оказывается пустым)
Как это исправить?
Оригинальный ресурс приложения

