向Exe里追加文件、分离出文件

最近我在做一个升级工具,需要在我的升级工具可执行文件里追加一个文件(以下简称dll文件),在升级过程中要把这个dll文件分离出来,放在待升级程序的安装目录里,在这里我介绍了两种追加文件和分离文件的方法。

1、通过数据流的方法

void __fastcall TForm4::btn1Click(TObject *Sender)
{
if (FileOpenDialog1->Execute())
{
TMemoryStream* stream = new TMemoryStream();
TMemoryStream* data = new TMemoryStream();
stream->LoadFromFile("F:\\test.exe");
stream->Position = stream->Size;
data->LoadFromFile(FileOpenDialog1->FileName);
stream->CopyFrom(data,0);
stream->Position = stream->Size;
int size = data->Size;
stream->Write(&size,4);
stream->SaveToFile("d:\\dest.exe");
delete stream;
delete data;
}
}
以上程序可以把文件"F:\\test.exe"和对话框中选中的文件,合并成一个新的文件"d:\\dest.exe"
void __fastcall TForm4::btn2Click(TObject *Sender)
{
if (FileOpenDialog1->Execute())
{
TMemoryStream* stream = new TMemoryStream();
TMemoryStream* data = new TMemoryStream();
data->LoadFromFile(FileOpenDialog1->FileName);
data->Position = data->Size - 4;
int size = 0;
data->Read(&size,4);
data->Position = data->Size - size - 4;
stream->CopyFrom(data,size);
stream->SaveToFile("d:\\temp.txt");
    }
}

以上程序可以把追加到Exe的程序,即对话框中选中的程序提取出来,存放为"d:\\temp.txt"

但是这种方法写出了的程序容易被杀毒软件干掉,于是便有了第二种方法。

2、通过资源文件追加和分离

(1)新建TXT文件,加入要追加的文件为c:\\test.dll,在TXT文件里这样写

MYDLL DLL c:\\test.dll

第一列为文件标识符可以自己取名,第二列为资源文件类型,第三列为文件访问路径

然后保存txt,并重命名为.rc

(2)将(1)中.rc和test.dll添加到工程中,到这一步就将文件test.dll加入到工程文件的EXE文件中了,通过实验我们可以发现文件追加成功后,EXE文件的大小变大了,增加的大小正好是test.dll文件的大小。

(3)分离文件

String str1 = "DLL";
String str2 = "MYDLL";
TResourceStream &rs = *new TResourceStream((int)HInstance, str2, str1.c_str());
rs.SaveToFile(‘'c:\\dest.dll");
delete &rs;

此时,exe文件里的test.dll就被分离出来,并保存为c:\\dest.dll"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值