Files
DP44/DataPRO/InstallShieldBranch/BrancherForm.cs
2026-04-17 14:55:32 -04:00

119 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace InstallShieldBranch
{
public partial class BrancherForm : Form
{
private readonly BackgroundWorker _worker;
public BrancherForm()
{
InitializeComponent();
_worker = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true };
_worker.DoWork += worker_DoWork;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
var searchAndReplace = new List<Tuple<byte[], byte[]>>()
{
//Tuple.Create(
// BitConverter.GetBytes((UInt32)0x5f544E49), //_TNI
// BitConverter.GetBytes((UInt32)0x5f544E49)), //_TNI
//Tuple.Create(
// BitConverter.GetBytes((UInt32)0x31305f32), //10_2
// BitConverter.GetBytes((UInt32)0x32305f32)), //20_2
Tuple.Create(
BitConverter.GetBytes((UInt32)0x5f564544), //_VED
BitConverter.GetBytes((UInt32)0x5f564544)), //_VED
Tuple.Create(
BitConverter.GetBytes((UInt32)0x35305f32), //50_2
BitConverter.GetBytes((UInt32)0x30305f33)), //00_3
};
using (var reader = new BinaryReader(new FileStream(@"C:\Projects\TestSetups\Installer_DataPRO_x64_DEV_2_05.ise", FileMode.Open)))
{
using (var writer = new BinaryWriter(new FileStream(@"C:\Projects\TestSetups\Installer_DataPRO_x64_DEV_3_00 - New.ise", FileMode.Create)))
{
BinaryUtility.Replace(reader, writer, searchAndReplace);
}
}
MessageBox.Show("Done");
}
public static class BinaryUtility
{
public static IEnumerable<byte> GetByteStream(BinaryReader reader)
{
const int bufferSize = 1024;
byte[] buffer;
do
{
buffer = reader.ReadBytes(bufferSize);
foreach (var d in buffer) { yield return d; }
} while (bufferSize == buffer.Length);
}
public static void Replace(BinaryReader reader, BinaryWriter writer, IEnumerable<Tuple<byte[], byte[]>> searchAndReplace)
{
foreach (byte d in Replace(GetByteStream(reader), searchAndReplace)) { writer.Write(d); }
}
public static IEnumerable<byte> Replace(IEnumerable<byte> source, IEnumerable<Tuple<byte[], byte[]>> searchAndReplace)
{
foreach (var s in searchAndReplace)
{
source = Replace(source, s.Item1, s.Item2);
}
return source;
}
public static IEnumerable<byte> Replace(IEnumerable<byte> input, IEnumerable<byte> from, IEnumerable<byte> to)
{
var fromEnumerator = from.GetEnumerator();
fromEnumerator.MoveNext();
int match = 0;
foreach (var data in input)
{
if (data == fromEnumerator.Current)
{
match++;
if (fromEnumerator.MoveNext()) { continue; }
foreach (byte d in to) { yield return d; }
match = 0;
fromEnumerator.Reset();
fromEnumerator.MoveNext();
continue;
}
if (0 != match)
{
foreach (byte d in from.Take(match)) { yield return d; }
match = 0;
fromEnumerator.Reset();
fromEnumerator.MoveNext();
}
yield return data;
}
if (0 != match)
{
foreach (byte d in from.Take(match)) { yield return d; }
}
}
}
private void button1_Click(object sender, EventArgs e)
{
_worker.RunWorkerAsync();
}
}
}