Código:
Para ver si funciona lo que hago es "descomprimir" el recurso del exe modificado.using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr BeginUpdateResource(string pFileName, bool bDeleteExistingResources);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool UpdateResource(IntPtr hUpdate, string lpType, string lpName, ushort wLanguage, IntPtr lpData, uint cbData);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool EndUpdateResource(IntPtr hUpdate, bool fDiscard);
static unsafe void Main()
{
string path = "c:\\users\\sean\\desktop\\resourcer.exe";
IntPtr hResource = BeginUpdateResource(path, false);
if (hResource.ToInt32() == 0)
throw new Exception("File Not Found");
string newMessage = File.ReadAllText("c:\\users\\sean\\desktop\\newMessage.txt");
Byte[] bytes = new ASCIIEncoding().GetBytes(newMessage);
GCHandle bHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
IntPtr ptr = bHandle.AddrOfPinnedObject();
ushort id = (ushort)Language.MakeLanguageID();
if (UpdateResource(hResource, "FILE", "message.txt", id, ptr, (uint)bytes.Length))
EndUpdateResource(hResource, false);
else
MessageBox.Show("Did not update", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static class Language
{
public static int MakeLanguageID()
{
CultureInfo currentCulture = CultureInfo.CurrentCulture;
int pid = GetPid(currentCulture.LCID);
int sid = GetSid(currentCulture.LCID);
return (((ushort)pid) << 10) | ((ushort)sid);
}
public static int GetPid(int lcid)
{ return ((ushort)lcid) & 0x3ff; }
public static int GetSid(int lcid)
{ return ((ushort)lcid) >> 10; }
}
}
Supuestamente deberia mostrar el nuevo .txt, pero no... cuando lo abro contiene el texto viejo.
Lo que hago para descomprimir los recursos del exe modificado es:
Código:
Redondeando....string strNewPathToSave = "new.txt";
Assembly assembly = Assembly.GetExecutingAssembly();
Stream resourceStream = assembly.GetManifestResourceStream("WindowsFormsApplication2.Resources.eva.txt");
System.IO.FileStream fs = System.IO.File.OpenWrite(strNewPathToSave);
try
{
// Save the File...
byte[] buffer = new byte[resourceStream.Length];
resourceStream.Read(buffer, 0, (int)resourceStream.Length);
fs.Write(buffer, 0, buffer.Length);
}
finally
{
fs.Close();
}
Con exe1 cambio un recurso de exe2 (un .txt). Despues abro el exe2 y descomprimo el recurso .txt . Este en lugar de mostrar el nuevo texto, muestra el texto del recurso original.
Alguna idea?
Saludos


