如何把文件打包进exe自身(10)

  • 主题发起人 主题发起人 zqssoft
  • 开始时间 开始时间
Z

zqssoft

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi做一个程序.exe,界面上有一个按钮,可以选择多个任意类型文件,当选择后,程序则自动把这几个文件添加到这个程序.exe文件里面,并且不影响程序.exe的正常运行和打开。还有一个按钮,可以输入添加到程序.exe中的文件名,或者什么也不用输入,点击一下,就能把添加进去的文件全部释放到指定的计算机文件夹中。请教:上面打包文件进exe自身,并且随时能够释放的功能怎么写啊?
 
EXE文件可以在结尾处随意增加内容而不影响程序的正常运行。具体说明可以看PE文件及结构。这样我们就可以自身程序读取到内存流,再把另外一个文件读取到内存流一起合并。然后在程序的结尾处加上文件的大小字节,用INTEGER写进程序结尾处。程序要释放文件就先读取自身结尾的整形值,把内存流定位那个偏移量就OK了。至于多个文件你可以最尾处定义文件个数 比如是3个文件,要读取第一个文件就偏移4个整形地址。[自身程序]【文件1】【文件2】【文件3】【文件1大小】【文件2大小】【文件3大小】【文件个数】按照这个结构写入程序,取的时候也一样。
 
========================================================= 信息标题:我知道了如何动态在EXE中加入任何资源(.EXE,.BMP,.SWF,.DOC..)大家分享一下吧!(1460字) 信息作者:crisee 发表时间:2001-8-18 11:06:00 阅读次数:363 信息内容: 前些日子,我发表了类似的帖子,是求援的。 然后,参考了些源码。经过“处心积虑”的琢磨,终于弄懂了。 本人是编程初学者,脑子也笨,高手见了不要见笑! 我发现哦,在EXE资源区内写入其它资源,虽然EXE还可运行,但图标会变成Windows默认的样儿,也就是说EXE中的ICON资源遭破坏了。然后,我尝试在EXE尾部写入资源,太棒了!虽然文件长度增加,但丝毫没有影响EXE的运行。我们假定要把 sir32.exe 加入 程序(project1.exe)中。 首先,创建新的Project,定义 private 变量 fStream:TFileStream,然后写个过程 Procedure TForm1.EXEStrore; var FS: TFileStream; Begin //首先将程序自身复制为~tmp.exe CopyFile(Application.ExeName, '~tmp.exe', false); //为打~tmp.exe创建 fStream,模式为 只读。 fStream.Create('~tmp.exe',fmOpenRead); //为打开sir32.exe创建 FS,模式为 只读。 FS.Create('Sir32.exe',fmOpenRead); try //将fStream定位至 ~tmp.exe文件尾部。 fStream.position := fStream.Seek(0, SoFromEnd); //将 FS (sir32.exe) 定位至文件首部,准备读入内存。 FS.Postion := 0; //将 FS(Sir32.exe) 写入 fStream(编译后的程序project1.exe) /.. fStream.CopyFrom(FS, FS.Size); finally //释放资源,要不会出错的。 fStream.free; FS.free; end; end; 以上简短的代码,就可以把任何类型的文件写入~tmp.exe中。当然,~tmp.exe只是中转站。然后在写一段用.bat文件删除程序本身,并把~tmp.exe改为程序名的代码。 如 定义 var pfile: TEXTFILE ; begin AssignFile(pfile,'~tmp.bat'); reWrite(pfile); WriteLn(pfile, Pchar('Del '+Application.ExeName)); WriteLn(pfile, Pchar('ren ~tmp.exe '+Application.ExeName)); WriteLn(pfile, 'Del %0'); WriteLn(pfile, 'Exit'); CloseFile(pfile); WinExec('~tmp.bat',SW_Hide); Halt; end; 最后,你会发现project1.exe文件长度增加了,具体增加的长度刚是sir32.exe的大小(一个字节也不差)。 但是,如何再把写入的文件再读出呢?自己想想,或是我下回就说 ^:^ -----------------------------------------------要改一下。 我前几天刚做了。 后来删了demo
 
后退
顶部