比较讨厌将配置写入注册表或配置文件。不知这个办法可不可行?

解决方案 »

  1.   

    可以用流的方式写在文件尾,或写注册表或写到ini文件中
      

  2.   

    楼上说的不错
    你可以用二进制方式打开的你的EXE文件
    在文件结尾写你的配置参数
      

  3.   

    写入INI吧!这样简单点,帮你顶一下!
      

  4.   

    to Kshape(伟大的大伟//给我一个机会、我想做好人!) 怎么写呢?我在程序中用TFileStream操作,但是提示“不能打开文件,因为有一个进程正在使用该文件”。
      

  5.   

    可以以资源的形式进行读写。
    通过在资源编辑器中,添加数据到自己定制的资源中。或者
    新作成一个数据段,把你想要存储的数据放到这个数据段中。当读操作的时候,直接使用你在此段声明的变量;而在你写的时候,可以根据exe文件中的文件头对数据段的偏移量来进行写操作。当然你必须采取足够的技巧,使得exe文件在执行时能够对自己进行修改。 (新作数据段的方法可以参考bo2k的源代码)不过,这种东西很容易被人认为是病毒
      

  6.   

    Ini或XML吧,程序不用Registry的都需要Config文件的
      

  7.   

    unit Unit1;interfaceuses
      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.
    //这是我仿写的,不太好,但愿能给你一些帮助!!