怎样由可执行文件a.exe生成另一个可执行文件(b.exe)?(在线)
比如:
a.exe中有一个button1按钮,我一点击button1,立即生成可执行文件b.exe;
保存在c:\目录中,并且运行b.exe;
能否给点思路??????????????

解决方案 »

  1.   

    把b.exe作为你的数据资源 在程序中把数据存为文件 文件的后缀是.exe
      

  2.   

    use ShellApi;
    CopyFile(Pchar(Application.exename),'c:\b.exe',false);
    ShellExecute(0,nil,'c:\b.exe',nil,nil,1);
      

  3.   

    用SHELLEXECUTE调用DELPHI的编译器,同时传递参数!
      

  4.   

    不是象lsxjf(云飞) 那样的简单复制行不行?
    因为a.exe 与 b.exe 是功能完全不同的两个软件!
      

  5.   

    一个变两个?
    复制自己不就得了
    copyfile函数
      

  6.   

    t0:delphi_xizhousheng(西周生) 
    DELPHI的编译器的文件名叫什么?
      

  7.   

    to:
    lsxjf(云飞)
    在我的一个捉迷藏的小游戏中用到!
      

  8.   

    那你的b.exe是什么?一个已经存在的程序?一段没有编译的代码????
      

  9.   

    将b.exe做为资源,添加在a.exe中,用时将b.exe释放到c:\
      

  10.   

    生鱼片的这个方法好,但是你怎么不写出来代码呢?不可能是你只知道这个概念吧?
    www.longteng.org  挚软网络
    我的OICQ:5008022
    我的EMAIL:[email protected]
    发邮件给我,可以不定期得到源程序
    不全部是原创,但很多是针对解决问
    题以后完全可以运行的源程序。
      

  11.   

    其实,作为资源文件并不是一个好的方法~~不知道大家有没有研究过PE文件格式??!前段时间抄得很火的:-)你根据它的格式,
     写入字节就是了,当然,如果文件过大,功能过复杂恐怕就...比如:
     New File
     Write ('4D5A') //好像是这个吧,PE文件头:-)
    .....................
      

  12.   

    MZ(也就是16进制的4D 5A)不是PE文件头,而是DOS文件头开始标示字符,PE文件头从PE标示字符开始(该起始地址,由$003C偏移地址指明)!
      

  13.   

    我写了一个://b.rc
    MyExe      EXEFILE        b.exe
    //Unit1.pasunit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ShellAPI;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    hResInfo,hRes : THandle;
    rsResourceStream:TResourceStream;
    begin
          hResInfo := FindResource(HInstance,PChar('MyExe'),'EXEFILE');
          hRes := LoadResource(HInstance, hResInfo);
          if hRes > 32 then
             Begin
               rsResourceStream:=TResourceStream.Create(0,PChar('MyExe'),'EXEFILE');
               rsResourceStream.SaveToFile('C:\b.exe');
               FreeResource(hRes);
               ShellExecute(handle,'open','C:\b.exe',nil,nil,SW_ShowNormal);
             End
          else
             showmessage('加载文件失败!');end;end.最后,别忘了用Project Manager把b.rc添加到工程里面去。
    祝你好运。
      

  14.   

    可以用流呀。如下:
    var
      MyStream:TFileStream;
    begin
      MyStream:=TFileStream.Create(Application.ExecName,fmReadOpen);
      //关联应用程序本身创建文件流。
      MyStream.SaveToFile('C:\B.Exe');
      //把文件流另存成一个文件
      MyStream.Free;
      //释放文件流
      ShellExecute(handle,'open','C:\b.exe',nil,nil,SW_ShowNormal);
      //运行这个可执行程序
    end;
      
    end;
      

  15.   

    很简单,我看过一篇文章,先把它包含在资源里面,然后再读出来,写成二进制文件,你可以和我联系、[email protected]
      

  16.   

    在DELPHI的BIN目录下,有个DCC32.EXE 那个东西就是DELPHI的编译器,
    你可以写个BAT文件:
    DCC32 C:\A.BPR
    然后就可以了
    我试过
    有些屏保生成软件,就可以根据你需要把图片加进去,然后生成了SCR文件,应该就是这么做的把
      

  17.   

    首先你要先有一个程序能将你的a.exe b.exe
    合并到一个exe 中;
    当然了 你的a.exe 的功能是判断自己是原始程序还是合并的程序
    如果是合成的程序就要将 后面添加的程序通过流的方式另存为b.exe
    然后a.exe 通过重新开一个线程去执行b.exe,
    我以前写了一个 但觉不是病毒 主要是对付黑心的老板用的。
      

  18.   

    上面用的文件流不行,要用内存流:
    uses
      ShellAPI;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyStream:TMemoryStream;
    begin
      MyStream:=TMemoryStream.Create;
      MyStream.LoadFromFile(Application.ExeName);
      //加载应用程序本身的可执行文件
      MyStream.SaveToFile('D:\B.Exe');
      //把文件流另存成一个文件
      MyStream.Free;
      //释放文件流
      ShellExecute(Application.Handle,'open','D:\b.exe',nil,nil,SW_ShowNormal);
      //运行这个可执行程序
    end;
    调试通过