比较讨厌将配置写入注册表或配置文件。不知这个办法可不可行?
解决方案 »
- ToolBar上的按钮大小怎么不能自动调整?
- DevExpressVCL里的cxtext有aafont里的滚动功能吗?
- DELPHI这段代码写成BCB可以编译的要怎么改
- 使用ShellExecute向另外一个EXE程序传递参数。
- 请教:如何使用SQL2000中的事件探查器,找到某软件使用哪个数据库?
- 没搞过delphi,毕业设计要用delphi做个营销管理 报表查询 仓储系统 财务管理4个模块,希望达人指点!!!!!!
- 一个表中主键字段 为自动编号,如果我修改了表中的一个字段的值。如何写修改的sql?
- 简单问题,在线等回答
- New。。。。关于"该内存不能为'written'"的错误问题!。。。。
- WIN 7装dephi 7 企业版
- 编译是时老报错:[Fatal Error] main.pas(72): Could not create output file '..\dcu\main.dcu'
- 暴难的问题!!怎么样修改远程XML文件的数据?
你可以用二进制方式打开的你的EXE文件
在文件结尾写你的配置参数
通过在资源编辑器中,添加数据到自己定制的资源中。或者
新作成一个数据段,把你想要存储的数据放到这个数据段中。当读操作的时候,直接使用你在此段声明的变量;而在你写的时候,可以根据exe文件中的文件头对数据段的偏移量来进行写操作。当然你必须采取足够的技巧,使得exe文件在执行时能够对自己进行修改。 (新作数据段的方法可以参考bo2k的源代码)不过,这种东西很容易被人认为是病毒
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,shellapi;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
resourcestring
ts='添加成功,请不要再次执行此程序,否则2.exe会包含多个1.exe!';
var
tfs,tff:tfilestream;
size:int64;
begin
try
tfs:=tfilestream.Create(getcurrentdir()+'\1.exe',fmopenreadwrite);
tff:=tfilestream.Create(getcurrentdir()+'\2.exe',fmopenreadwrite);
tff.Seek(0,sofromend);//这一句很重要,如果放到后面,那么,将把2.exe覆盖掉,
tff.CopyFrom(tfs,0);
size:=tfs.Size+sizeof(size);
//tff.Seek(0,sofromend);//如果把前一句放到这里来,那么,就会把2.exe改写为1.exe,
tff.Write(size,sizeof(size));
form1.Canvas.TextOut(10,10,ts);
finally
tfs.Free;
tff.Free;
end;
sleep(2000);
application.Terminate;
end;procedure TForm1.Button2Click(Sender: TObject);
resourcestring
entexe='2秒钟后开始执行刚刚释放出来的3.exe文件';
var
tfs:tfilestream;
tms:tmemorystream;
size:int64;
begin
try
tfs:=tfilestream.Create(getcurrentdir()+'\2.exe',fmopenreadwrite);;
tfs.Seek(-sizeof(size),sofromend); //定位到存放第二个exe文件大小的位置,
tfs.ReadBuffer(size,sizeof(size));//把第二个exe文件的大小读出到size中
tfs.Seek(-size,sofromcurrent); //把文件指针定位到第二个exe文件头,
tms:=tmemorystream.Create; //创建内存流,
tms.CopyFrom(tfs,size);//从文件流tfs的当前位置(第二个exe文件头),拷贝第二个exe文件到内存流中
tms.SaveToFile(getcurrentdir()+'\3.exe');//把内存流保存为一个exe文件
finally
tfs.Free;
tms.Free;
end;
form1.Canvas.TextOut(10,10,entexe);
sleep(2000);
shellexecute(form1.Handle,'open',pchar('3.exe'),'-s','',sw_shownormal);
end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
deletefile('3.exe');
end;end.
//这是我仿写的,不太好,但愿能给你一些帮助!!