Я пытаюсь заменить ресурс файла exe (.NET, С#) с помощью кода С#.
Я нашел эту статью и сделал этот код (используя 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;
ProjectName.Properties.Resources.encFile
- это то, как я получаю файл в EXE.. - person eranj   schedule 03.08.2011