Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9471988
  • 博文数量: 1751
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20101
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1751)

文章存档

2024年(27)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: WINDOWS

2010-10-19 20:41:52

因为我现在项目组用了一些第三方控件和自己开发的控件,为了方便开发人员配置开发环境
,我想做一个控件的安装程序,不知道Delphi有没有提供这方面得API或是直接写注册表。
希望高手指点,多谢。

1:如果用Install Sheld则相当简单,用选上self-register就可以了。
2:哦!你的问题是自己制作一个安装程序!是吧?
那也不难。先拷贝,然后调用注册程序。比如你要安装MsInet.ocx,则:
GetSystemDirectory(Buf,255);
strWsysDir:=Buf;//获得system目录
if not FileExists(strWsysDir '\MSINET.OCX') then begin
Memo1.Lines.Add('缺少系统文件"MSINET.OCX",已修复!');
CopyFile(Pchar(Extractfilepath(Application.ExeName) '\0403\MSINET.OCX'),PChar(strWsysDir '\MSINET.OCX'),False);
end;//0403你的安装程序用来放置要安装的控件文件的目录(当然可以是其它)
然后:
Shellexecute(handle,nil,'regsvr32.exe',
PChar('/s ' strWsysDir '\MSINET.OCX'),nil,sw_shownormal);
注:1、你也可以将要安装的文件先做成资源,然后打包到安装程序的Exe文件中,
具体怎么做在后面附有资料;
2、Shellexecute的第4个参数是regsvr32.exe的命令行参数,"/s"表示隐藏
注册成功的提示信息(我想你的安装程序肯定不想安装一个控件还要用户
确认一次吧!)

付:Delphi中巧用资源:
Delphi中巧妙利用RES文件


在Delphi项目中,通常有一个与项目名称主文件名相同的.RES文件,该文件用于保存应用程序图标等资源,对应于此文件,在项目文件中一定含有编译指 示“{$R *.res}”,告诉编译器编译时需要包含与项目主文件名相同的.RES文件。同样,如果需要在应用程序中以资源形式包含任何文件类型,也可以利 用.RES文件。本文将告诉你如何利用RES文件在Delphi程序内部包含文件。

一、创建.RES文件
这里以一组音频文件为例。首先用记事本等任何文本编辑器编写文件“MyMusic.RC”。文件的格式及内容如下:
SRC1 FILE1 OnlyYou.mp3
SRC2 FILE2 YesterdayOnceMore.mp3
SRC3 FILE3 MoonRiver.mp3

其中,每一行表示声明一项资源,每一项资源的声明包含三个参数定义,第一个参数是资源的名称,第二个参数是资源的类型描述(本例定义了三类),第三个参数是文件名。参数之间必须由空格隔开。
编写完成“MyMusic.RC”文件后,将其与上述三个.MP3文件放置在同一文件夹中(为了避免由设置路径带来的麻烦)。然后以下面的命令行运行应用 程序brcc32.exe(位于..\Delphi6\Bin):brcc32 mymusic.rc需要注意的是,该命令只能在命令行方式下执行。如果系统的PATH环境变量中不包含Delphi的运行路径,那么你还需要将 brcc32.exe与MyMusic.RC、三个.MP3文件放置在同一路径中进行。运行上述命令行后,将在同一路径中得到文件 “MyMusic.RES”,这就是一个独立完整的资源文件,其格式是遵循Windows 标准的,因此可以在诸如VB、VC、CBuilder等多种开发环境中使用。

二、在程序中声明包含.RES文件
你只需要在项目中的某个单元中(最好是你需要利用这些资源的单元,这样会使你的应用程序更具有可读性)加入如下编译指示:
{$R MyMusic.RES}

尽管该编译指示可以位于单元的任何位置,但为了使你的源代码结构合理,最好还是将其并列位于编译指示“{$R *.dfm}”(每个含有窗体文件的单元中都含有该行编译指示)。这里的编译指示就明确告诉编译器,在编译应用程序时需要将资源文件 “MyMusic.RES”包含到应用程序中。

三、在运行时获取资源
上述两步工作仅仅是基础(但一定是必要的),利用资源才是根本目的。下面的过程将告诉你如何将应用程序中包含的资源(文件)重新还原。
procedure MusicResToFile(const ResName, ResType,FileName: string);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(HInstance,ResName, PChar(ResType));
Res.SaveToFile(FileName); //将资源保存为文件,即还原文件
//你还可以进行其它的流操作,在内存中实现对资源利用而不必另存为文件
Res.Free;
end;

调用该过程的示例如:
MusicResToFile('SRC2', 'FILE2', 'TheSecondMusic.MP3');

值得一提的是,利用此方法,你完全可以制作自己的安装程序,该安装程序仅包含一个可执行文件,在该可执行文件中以资源的形式包含所有将要安装的内容(文 件)。此外,如果在你的应用程序中需要播放外部音频文件(如背景音乐、声音提示等),也可通过此方法将这些外部文件包含到应用程序中,从而避免用户误删这 些音频文件导致应用程序的不完整。

怎么样,够详细了吧,你一定可以写出很好好的安装程序的。
最后最重要的:分给我,快!同时祝你好运!

3:to delphiroad:
Delphi的控件(BPL)也能用regsvr32.exe来注册吗??
4:HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Known Packages
5:to Grape:
Bpl,一般也不需要发布,因为Delphi帮你放到exe文件中了。
当然你也可以适用Runtime Packages,一方面你的Packages工程的Option中应该
选上:DesignTime and RunTime,表示该包可以作为运行时包,另一方面,在使
用该包的工程Option中,Packages页中,必须选择Build with Runtimer Packages选项
表示将packages作为Runtime packages,实际上就好像我们使用dll文件一样了。
不过bpl真的是不需要注册的。
zjan521的方法也是对的。
6:把包文件加到注册表
HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Known Packages
阅读(4537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~