C#: String in einer DLL (Win32) bearbeiten.

olcayb

Mitglied
Hallo Community,

ich möchte in einer DLL einen String ändern und die DLL neu speichern. Hier mein Versuch der Fehlschlug:

Code:
private void button_apply_Click(object sender, System.EventArgs e)
{
  //Copy picture to %WINDIR%\eHome\
  File.Copy(textBox_bg.Text, winpath + "\\eHome\\NewMCE.Background.jpg", true);

  //Create reader & open file
  FileStream fs = new FileStream(winpath+"\\ehome\\ehres.dll", FileMode.Open);
  BinaryReader br = new BinaryReader(fs);
  byte[] bytes = br.ReadBytes(Convert.ToInt32(br.BaseStream.Length));
  br.Close();

  //Replace String
  string ehresstr = System.Text.Encoding.UTF8.GetString(bytes);
  ehresstr = ehresstr.Replace("Common.Background.jpg", "NewMCE.Background.jpg");

  //Delete old files +WFP file
  File.Delete(winpath + "\\ehome\\ehres.dll");
  File.Delete(winpath + "\\system32\\dllcache\\ehres.dll");

  //Create a writer and open the file
  FileStream fs2 = new FileStream(winpath+"\\ehome\\ehres.dll", FileMode.Create);
  BinaryWriter bw = new BinaryWriter(fs2);

  //Write file
  bw.Write(System.Text.Encoding.Unicode.GetBytes(ehresstr));
  //Close the stream
  bw.Close();
}

Die die neue Datei sieht etwa aus wie die original und hat auch den neuen String jedoch ist die Datei eine andere Dateigröße und ist kaputt. Ich glaube es liegt am Encoding (UTF-8/16 usw..).

Vielleicht kann mir hier einer irgendwie helfen. Danke :)
Olcay
 
Zuletzt bearbeitet:
_

Hi,

hab jetzt eine Funktion in der Kernel32.dll gefunden die genau das macht was ich will. Ich wollte ein JPEG/PNG in einer DLL ersetzten.

Die Funktion heißt UpdateResource()
-> http://msdn.microsoft.com/library/d...eference/ResourceFunctions/UpdateResource.asp

Nur krieg ich es nicht ganz hin :( Mein aktueller Quellcode:

Code:
byte[] picByteArray = null;
FileStream picStream = null;
BinaryReader picReader = null;
IntPtr updatePointer = IntPtr.Zero;

// Bild wird als Array (Byze) eingelesen um dann in die DLL einzufügen
picStream = new FileStream(textBox_bg.Text, FileMode.Open, FileAccess.Read);
picReader = new BinaryReader(picStream);
picByteArray = picReader.ReadBytes((int)picStream.Length );

updatePointer = (IntPtr)BeginUpdateResource(winpath+"\\eHome\\ehres.dll", false);

UpdateResource(updatePointer, RT_RCDATA, Convert.ToUInt32("COMMON.BACKGROUND.PNG"), 1033, picByteArray, (uint)picByteArray.Length);
EndUpdateResource(updatePointer, false);

Hat einer vielleicht ein gutes Beispiel für mich? Hab schon gegooglet aber nix wirkliches gefunden. Hoffe jemand kann mir sagen wie das Funktioniert. :)

Vielen Dank
Olcay
 
Zuletzt bearbeitet:
Zurück