怎么才能把文件打包到一个文件里?

解决方案 »

  1.   

    刚好以前写过一个简单的,给你看看吧。当然我是没有怎么整理的,你要自己整理一下^_^
    也是将文件打包成资源文件
    =================================
      private
        { Private declarations }
        OnSetup,OnRepair,OnUninstall:Boolean;
        SDesktop,SStart:Boolean; //创建桌面图标;创建开始菜单
        APPPath:String;  //程序的路径
        DesktopFile,StartFile:String;
        A,B:Boolean;
      public
        { Public declarations }
      end;var
      SetupForm: TSetupForm;implementation
    {$R *.dfm}
    {$R filemanager.RES}procedure TSetupForm.B_CloseClick(Sender: TObject);
    begin
      Close;
      if A then ShellExecute(handle,'open',PChar(ExtractFilePath(ParamStr(0))+'Copyapp.bat'),nil,nil,SW_Hide);
      if B then ShellExecute(handle,'open',PChar('c:\destory.bat'),nil,nil,SW_Hide);
    end;procedure TSetupForm.Release(RESHand,RESType,Path:String;Types:Integer);
    var
      Res:TResourceStream;
      FileName:String;
    begin
      case Types of                 //释放文件
      0:FileName:='filemanager.mdb';
      1:FileName:='filemanager.exe';
      end;
      Res:=TResourceStream.Create(0,RESHand,PChar(ResType));
      Res.SaveToFile(Path+FileName);
      Res.Free;
    end;procedure TSetupForm.FlatButton2Click(Sender: TObject);
    begin
      Close;
    end;procedure TSetupForm.FlatRadioButton1Click(Sender: TObject);
    begin
      OnSetup:=True;
      OnRepair:=False;
      OnUninstall:=False;
    end;procedure TSetupForm.FlatRadioButton2Click(Sender: TObject);
    begin
      OnSetup:=False;
      OnRepair:=True;
      OnUninstall:=False;
    end;procedure TSetupForm.FlatRadioButton3Click(Sender: TObject);
    begin
      OnSetup:=False;
      OnRepair:=False;
      OnUninstall:=True;
    end;procedure TSetupForm.FlatButton1Click(Sender: TObject);
    begin
      if OnSetup then
      begin
        FlatPanel2.Height:=287;
      end;  if OnRepair then
      begin
        FlatPanel3.Height:=287;
      end;  if OnUninstall then
      begin
        FlatPanel5.Height:=287;
      end;
    end;procedure TSetupForm.FlatButton3Click(Sender: TObject);
    var
      Path:String;
    begin
      FlatPanel2.SetFocus;
      if SelectDirectory('为 "Windows 资源魔镜" 选择安装路径','',Path) then E_SetupPath.Text:=Path;
    end;procedure TSetupForm.FlatButton6Click(Sender: TObject);
    begin
      FlatPanel2.Height:=0;
    end;procedure TSetupForm.FlatButton5Click(Sender: TObject);
    begin
      Close;
    end;procedure TSetupForm.FlatButton4Click(Sender: TObject);
    begin
      if E_SetupPath.Text<>'' then
      begin
        if not DirectoryExists(E_SetupPath.Text) then
        begin
          Try
            ForceDirectories(E_SetupPath.Text);
            FlatPanel3.Height:=287;
            APPPath:=E_SetupPath.Text;
          except
            MessageDlg('输入有误,无法创建该文件夹!',mtError,[mbOK],0);
          end;
        end else
        begin
          FlatPanel3.Height:=287;
          APPPath:=E_SetupPath.Text;
        end;
      end;
    end;procedure TSetupForm.FlatButton9Click(Sender: TObject);
    begin
      DelDirectory(APPPath);
      CLose;
    end;procedure TSetupForm.FlatButton7Click(Sender: TObject);
    begin
      FlatPanel3.Height:=0;
      DelDirectory(APPPath);
    end;
    function TSetupForm.DelDirectory(const Source:string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_DELETE;
        pFrom := PChar(source+#0);
        pTo := #0#0;
        fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
      

  2.   

    procedure TSetupForm.FlatButton8Click(Sender: TObject);
    var
      Reg:TRegistry;
      Path:String;
      Txtfile:TextFile;
      StartPath:String;
    begin
      FlatPanel4.Height:=287;
      {写程序位置}
      Sleep(200);
      FG1.Progress:=15;
      Reg:=TRegistry.Create;
      Reg.RootKey:=HKEY_LOCAL_MACHINE;
      Reg.OpenKey('SOFTWARE\Filemanager',True);
      Reg.WriteString('APPPath',Apppath);
      Reg.CloseKey;
      Sleep(100);
      FG1.Progress:=25;
      {写卸载程序位置}
      Reg.OpenKey('SOFTWARE\microsoft\windows\currentversion\uninstall\Filemanager',true);
      Reg.WriteString('Displayname','Windows 资源魔镜');
      Reg.WriteString('UnInstallString',APPPath+'\'+ExtractFileName(ParamStr(0)));
      Reg.CloseKey;
      Sleep(100);
      FG1.Progress:=35;
      {创建程序}
      Path:=APPPath;
      if Path[Length(Path)-1]<>'\' then Path:=Path+'\';
      Release('FileM','Filemanager_db',Path,0);
      Sleep(250);
      FG1.Progress:=55;
      Release('FileM','Filemanager_pro',Path,1);
      Sleep(250);
      FG1.Progress:=75;
      {准备安装程序的拷贝}
      AssignFile(TxtFile,ExtractFilePath(ParamStr(0))+'Copyapp.bat');
      rewrite(TxtFile);
      writeln(TxtFile,'copy "'+paramstr(0)+'" "'+Path+'"');
      writeln(TxtFile,'del %0');
      closefile(TxtFile);
      Sleep(100);
      FG1.Progress:=85;
      {创建快捷方式}
      if FlatCheckBox1.Checked then
      begin
        SDesktop:=True;
        SStart:=False;
        StartPath:=AddLink;
        Reg.OpenKey('SOFTWARE\Filemanager',True);
        Reg.WriteString('Desktop',StartPath+'\filemanager.lnk');
        Reg.CloseKey;
        Sleep(100);
        FG1.Progress:=90;
      end;
      {创建程序组}
      if FlatCheckBox2.Checked then
      begin
        SDesktop:=False;
        SStart:=True;
        StartPath:=AddLink;
        Reg.OpenKey('SOFTWARE\Filemanager',True);
        Reg.WriteString('Start',StartPath);
        Reg.CloseKey;
      end;
      Sleep(100);
      FG1.Progress:=100;
      Reg.Free;
      A:=True;
      MessageBeep(0);
      FlatButton10.Enabled:=TRue;
      if OnSetup then
      Label11.Caption:='安装成功!安装程序已经在您的计算机上安装了“Windows 资源魔镜”。';
      if OnRepair then
      Label11.Caption:='修复成功!安装程序已经为您修复了“Windows 资源魔镜”主程序,请继续使用。';
      Label11.Visible:=True;
      Label12.Visible:=True;
    end;procedure TSetupForm.FormShow(Sender: TObject);
    var
      Reg:TRegistry;
    begin
      FlatPanel2.Height:=0;
      FlatPanel3.Height:=0;
      FlatPanel4.Height:=0;
      FlatPanel5.Height:=0;
      Reg:=TRegistry.Create;
      Reg.RootKey:=HKEY_LOCAL_MACHINE;
      if not Reg.KeyExists('SOFTWARE\Filemanager') then
      begin
        FlatRadioButton1.Checked:=True;
        FlatRadioButton2.Enabled:=False;
        FlatRadioButton3.Enabled:=False;
      end
      else
      begin
        Reg.OpenKey('SOFTWARE\Filemanager',False);
        APPPath:=Reg.ReadString('APPPath');
        DesktopFile:=Reg.ReadString('Desktop');
        StartFile:=Reg.ReadString('Start');
        FlatRadioButton1.Enabled:=False;
        FlatRadioButton2.Checked:=True;
      end;
      Reg.CloseKey;
      Reg.Free;
    end;function TSetupForm.AddLink:String;
    var
      tmpObject : IUnknown;
      tmpSLink : IShellLink;
      tmpPFile : IPersistFile;
      PIDL : PItemIDList;
      addDirectory : array[0..MAX_PATH] of Char;
      StartPath : String;
      StartupFilename : String;
      LinkFilename : WideString;
    begin
      StartupFilename :=APPPath+'\filemanager.exe';
      tmpObject := CreateComObject(CLSID_ShellLink);
      tmpSLink := tmpObject as IShellLink;
      tmpPFile := tmpObject as IPersistFile;
      tmpSLink.SetPath(pChar(StartupFilename));
      tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));
      if SDesktop then
        begin
          application.ProcessMessages;
          SHGetSpecialFolderLocation(0,CSIDL_COMMON_DESKTOPDIRECTORY,PIDL);
          SHGetPathFromIDList(PIDL,addDirectory);
          StartPath := addDirectory;
          LinkFilename := StartPath +'\filemanager.lnk';
          tmpPFile.Save(pWChar(LinkFilename),FALSE);
        end;
      if SStart then
        begin
          application.ProcessMessages;
          SHGetSpecialFolderLocation(0,CSIDL_COMMON_programs,PIDL);
          SHGetPathFromIDList(PIDL,addDirectory);
          ForceDirectories(addDirectory+'\FileManager');
          StartPath:=addDirectory+'\FileManager';
          linkFilename := StartPath +'\filemanager.lnk';
          tmpPFile.Save(pWChar(LinkFilename),FALSE);
        end;
        Result:=StartPath;
    end;procedure TSetupForm.FlatButton10Click(Sender: TObject);
    begin
      Close;
      ShellExecute(handle,'open',PChar(ExtractFilePath(ParamStr(0))+'Copyapp.bat'),nil,nil,SW_Hide);
    end;procedure TSetupForm.FlatButton13Click(Sender: TObject);
    begin
      CLose;
    end;procedure TSetupForm.FlatButton11Click(Sender: TObject);
    begin
      Close;
      ShellExecute(handle,'open',PChar('c:\destory.bat'),nil,nil,SW_Hide);
    end;procedure TSetupForm.FlatButton12Click(Sender: TObject);
    var
      DelReg:TRegistry;
      TxtFile:TextFile;
    begin
      FlatButton12.Enabled:=False;
      FlatButton13.Enabled:=False;
      {删除注册表信息}
      FG2.Progress:=20;
      DelReg:=TRegistry.Create;
      DelReg.RootKey:=HKEY_LOCAL_MACHINE;
      DelReg.OpenKey('Software',false);
      DelReg.DeleteKey('Filemanager');
      DelReg.CloseKey;
      DelReg.OpenKey('SOFTWARE\microsoft\windows\currentversion\uninstall',false);
      DelReg.DeleteKey('Filemanager');
      DelReg.CloseKey;
      DelReg.Free;
      FG2.Progress:=40;
      {删除文件}
      DeleteFile(APPPath+'\filemanager.exe');
      DeleteFile(APPPath+'\filemanager.mdb');
      FG2.Progress:=60;
      {删除快捷方式}
      DelDirectory(StartFile);
      DeleteFile(DesktopFile);
      FG2.Progress:=80;
      {写txt文件}
      AssignFile(TxtFile,'c:\destory.bat');
      rewrite(TxtFile);
      writeln(TxtFile,'del "'+APPPath+'\'+ExtractFileName(ParamStr(0))+'"');
      writeln(TxtFile,'del %0');
      closefile(TxtFile);
      FG2.Progress:=100;
      MessageBeep(0);
      B:=True;
      Label14.Visible:=True;
      Label15.Caption:='此文件夹无法清除,请手动删除:'+APPPath;
      FlatButton11.Enabled:=True;
    end;end.