自己的一个程序做好了,想把数据库和程序用一个安装程序合并起来,如何做?给个思路,

解决方案 »

  1.   

    使用wise也可以的,要不你可以考一些程序需要的动态库到自己程序运行的目录,还要注意库是否要注册
      

  2.   

    WinRar 也可已制作简单的安装。
      

  3.   

    我认为InnoSetup是最简单易用的
    InnoSetup是开源项目,他的Source都是免费的
      

  4.   

    http://soft.56kc.com/Filedown.aspx?FID=139http://www.56kc.com/web/technology/wise/wiseuse.htm
    http://www.56kc.com/web/technology/dabao.htm
      

  5.   


      当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做的第一步操作。   很多报刊文章介绍了许多如何利用installshield等工具软件来制作安装程序的方法,这种办法可以很快建立起较常见的安装模式,但用这种办法也有一些不足,如做成的安装程序一般较大;风格较单一;不能灵活的控制启动方式和快捷方式。其实安装程序的的几个运行步骤较固定,我们完全可以自己来编写安装程序。下面就详细介绍如何用DELPHI编写具有自己软件特色的安装程序。   安装程序要达到的几个原则,如配置的一次性等,在有关杂志上已有许多文章介绍,就不再累述。这里主要介绍安装程序编写中几个主要过程: 1、将需要安装的程序制作成资源文件 
      Step 1:编写myres.rc资源脚本文件,可用记事本等编写。   MYDBSRC mydbsrcfile c:\resdemo\mynbdb.mdb   MYDBJET mydbjetfile c:\resdemo\mdac_typ.exe   MYDBAPP mydbappfile c:\resdemo\Tnbdemo.exe   7001 Icon c:\resdemo\setup.ico   Step 2:利用BRCC32编译生成资源文件myres.res。   brcc32.exe myres.rc 2、编写安装程序代码 
      Step 1: 在setup.dpr文件中加入{$R mymyres.RES} 语句,这样在编译文件时包含资源文件。   Step 2: 编写安装程序背景界面。    //界面色彩渐变效果是通过用渐变的画刷刷绘依次相邻的矩形块实现的。   //也可以实现其它特殊效果的安装界面。   var i,j:Integer;   Dct:TRect;   begin   form1.WindowState:=wsMaximized;   j:=form1.width;   //获得表单高度   for i:=0 to 255 do   //此处设置RGB()中一个颜色值   begin   Canvas.Brush.Color:=RGB(0,0,255-i);   //每次画矩形的画刷颜色 (左,上,右,下)   //Dct:=Rect(i*2,0,(i+1)*2,j);   Dct:=Rect(0,i*2,j,(i+1)*3);   //每次刷绘的矩形区域   Canvas.FillRect(Dct);   Form1.Canvas.TextRect(Dct,30,40,'宁波大学课件管理系统 v1.0');   //填充颜色   end;   end;   Step 3:创建主程序工作目录   //设置目录环境及配置文件   if not DirectoryExists(EdtDir.Text) then   //   if MessageBox(getfocus,'该目录不存在,是否创建该目录?','询问',1) = idOK then      try        ForceDirectories(EdtDir.Text);      except        MessageBox(getFocus,'创建目录失败!','信息',0);        Exit;      end   //   else Exit;   // ModalResult := mrOK;   Step 4:生成主程序配置文件   变量:   var    setupinfo : TiniFile;   //配置当前数据工作路径,选择与自己系统有关的驱动程序。   setupinfo:= Tinifile.Create( trim(FrmPathSelect.EdtDir.Text)+'\setup.ini');   setupinfo.WriteString('access','workdbpath',trim(FrmPathSelect.EdtDir.Text)+'\mynbdb.mdb';   setupinfo.WriteString('access','backdbpath',trim(FrmPathSelect.EdtDir.Text)+'\mynbdbbak.mdb');   setupinfo.Free;   Step 5:从资源文件中还原有关文件。   变量:   var   res:tresourcestream;   resname,resnewname:string;   RegFile:TRegIniFile;   begin   //从资源文件中还原数据库文件   resnewname:=trim(FrmPathSelect.EdtDir.Text)+'\mynbdb.mdb';    resname:='MYDBSRC';    res:=tresourcestream.Create(hinstance,resname,pchar('mydbsrcfile'));    res.savetofile(resnewname);    res.free;   //从资源文件中还原主程序文件   resnewname:=trim(FrmPathSelect.EdtDir.Text)+'\Tnbdemo.exe';    resname:='MYDBAPP';    res:=tresourcestream.Create(hinstance,resname,pchar('mydbappfile'));    res.savetofile(resnewname);    res.free;   //在注册表中写入主程序路径名及执行文件名的信息,以便在   //升级主程序时用到。    RegFile := TRegIniFile.Create;    RegFile.RootKey := HKEY_LOCAL_MACHINE;    RegFile.WriteString('SOFTWARE\mynb','exepath',trim(resnewname));    RegFile.Free;   end   Step 6:安装数据库驱动(与SETP 4对应)   //安装数据库驱动程序   var   cmdlinepchar:array[0..120] of char;   startupinfo:tstartupinfo;   processinfo:tprocessinformation;   begin    screen.cursor:=crhourglass;    strpcopy(cmdlinepchar,trim(FrmPathSelect.EdtDir.Text)+'\mdac_typ.exe /q');    fillchar(startupinfo,sizeof(startupinfo),#0); //置0    with startupinfo do    begin    cb:=sizeof(startupinfo);    dwflags:=startf_useshowwindow or startf_usestdhandles;    wshowwindow:=sw_hide; //隐藏被调用程序窗口    end;    if createprocess(nil,cmdlinepchar,nil,nil,true,0,nil,nil,startupinfo,processinfo) then    //创建进程    begin    waitforsingleobject(processinfo.HProcess,infinite); //等待进程结束   end    else    begin      exit;    end;    screen.cursor:=crDEFAULT;   DeleteFile(PChar(trim(FrmPathSelect.EdtDir.Text)+'\mdac_typ.exe'));   end;   Step 7:创建程序组   变量:   var   smacro:string;    szmacro:array[0..254] of char;    sgroupdesc,sgroupname:string;    sprogdesc:string;    sprogicon:string;   //创建主程序组     //打开对话通路    if ddeclientconv1.OpenLink then    begin      //建立组群      sgroupdesc:='宁波大学课件管理系统 ';      sgroupname:='宁波大学课件管理系统 v1.0';      //组成宏指令      smacro:='[creategroup('+sgroupdesc+','+sgroupname+')]';      strpcopy(szmacro,smacro);           //转成null-term 字串      ddeclientconv1.ExecuteMacro(szmacro,false); //执行宏指令      //建立ICON图像      sprogicon:=trim(FrmPathSelect.EdtDir.Text)+'\Tnbdemo.exe';;      sprogdesc:='宁波大学课件管理系统';      smacro:='[additem('+sprogicon+','+sprogdesc+')]';      strpcopy(szmacro,smacro);      ddeclientconv1.ExecuteMacro(szmacro,false);      ddeclientconv1.CloseLink;    end;   Step 8:创建桌面快捷方式   //uses shlobj,comobj,activex;   var   tmpObject:IUnknown;   tmpSLink:IShellLink;   tmpPFile:IPersistFile;   PIDL:PItemIDList;   StartupDirectory : array[0..MAX_PATH] of Char;   StartupFilename : String;   LinkFilename : WideString;   c1:THandle;   begin   StartupFilename := ''Tnbdemo.exe'';   tmpObject := CreateComObject(CLSID_ShellLink);   tmpSLink := tmpObject as IShellLink;   tmpPFile := tmpObject as IPersistfile;   tmpSLink.SetPath(pChar(StartupFilename));   tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));   SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL);   SHGetPathFromIDList(PIDL,StartupDirectory);   LinkFilename := StartupDirectory + '\mynotepad.lnk';   showmessage(linkfilename);   tmpPFile.Save(pWChar(LinkFilename),FALSE);   c1:=windows.FindWindowEx(windows.FindWindowEx(windows.FindWindow('Progman','Program Manager'),0,'SHELLDLL_DefView',''),0,'SysListView32','');   PostMessage(c1,WM_KEYDOWN,VK_F5,0);   PostMessage(c1,WM_KEYUP,VK_F5,1 shl 31);   end;   Step 9:重新启动机器   begin    ExitWindowsEx(2,0);   end;   以上是程序的主要语句部分,从本人的开发系统中剪出来,用到了一些WIN API的调用。在安装过程中的一些提示性界面及每一个步骤大家可以根据自己的需要而制作,这样做出来的安装程序精练,而且风格可以做的很特别。