最近在学习用installshield制作安装包,这两天遇到需要写注册表的问题:通过注册表设置文件关联,即将一个带有特殊后缀的文件连接到一个应用程序上。怎么在installshield中进行设置呢?
首先我们先来学习一下注册表,以下内容为转载
认识注册表
一、六大根键的作用
在注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来,十分类似于目录结构。每个键都包含了一组特定的信息,每个键的键名都是和它所包含的信息相关的。如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。如果这个文件夹被用户打开了,那么这个“+”就会变成“-”。
1.HKEY_USERS
该根键保存了存放在本地计算机口令列表中的用户标识和密码列表。每个用户的预配置信息都存储在 HKEY_USERS 根键中。 HKEY_USERS 是远程计算机中访问的根键之一。
2.HKEY_CURRENT_USER
该根键包含本地工作站中存放的当前登录的用户信息 , 包括用户登录用户名和暂存的密码 ( 注:此密码在输入时是隐藏的 ) 。用户登录 Windows 98 时,其信息从 HKEY_USERS 中相应的项拷贝到 HKEY_CURRENT_USER 中。
3.HKEY_CURRENT_CONFIG
该根键存放着定义当前用户桌面配置 ( 如显示器等 ) 的数据 , 最后使用的文档列表( MRU )和其他有关当前用户的 Windows 98 中文版的安装的信息。
4.HKEY_CLASSES_ROOT
包含注册的所有ole信息和文档类型,是从 hkey_local_machine\software\classes复制的。根据在 Windows 98 中文版中安装的应用程序的扩展名 , 该根键指明其文件类型的名称 。
5.HKEY_LOCAL_MACHINE
该根键存放本地计算机硬件数据 , 此根键下的子关键字包括在 SYSTEM.DAT 中 , 用来提供 HKEY_LOCAL_MACHINE 所需的信息 , 或者在远程计算机中可访问的一组键中。
该根键中的许多子键与 System.ini 文件中设置项类似。
6.HKEY_DYN_DATA
该根键存放了系统在运行时动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中。
二、六大根键的关系
虽然在注册表中,六个根键看上去处于一种并列的地位,彼此毫无关系。但事实上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分,而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分。
HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的信息。在每次系统启动后,系统就映射出HKEY_CURRENT_USER中的信息,使得用户可以查看和编辑其中的信息。
实际上,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT,为了用户便于查看和编辑,系统专门把它作为一个根键。同理,HKEY_CURRENT_CONFIG\SYSTEM\Current Control就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。
HKEY_USERS中保存了默认用户和当前登录用户的用户信息。HKEY_CURRENT_USER中保存了当前登录用户的用户信息。
HKEY_DYN_DATA保存了系统运行时的动态数据,它反映出系统的当前状态,在每次运行时都是不一样的,即便是在同一台机器上。
三、认识键和子键
注册表通过键和子键来管理各种信息。但是,注册表中的所有信息是以各种形式的键值项数据保存下来。在注册表编辑器右窗格中,保存的都是键值项数据。这些键值项数据可分为如下三种类型:
1. 字符串值
在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成,最大长度不能超过 255 个字符。比如“ D:\pwin98\trident 即为键值名“ a ”的键值,它是一种字符串值类型的。同样地,“ ba ”也为键值名“ MRUList的键值。通过键值名、键值就可以组成一种键值项数据,这就相当于 Win.ini 、 Ssyt-em.ini 文件中小节下的设置行。其实,使用注册表编辑器将这些键值项数据导出后,其形式与 INI 文件中的设置行完全相同。
2. 二进制值
在注册表中,二进制值是没有长度限制的,可以是任意个字节长。在注册表编辑器中,二进制以十六进制的方式显示出来。比如键值名 Wizard 的键值“ 80 00 00 00 ”就是一个二进制。
3. DWORD 值
DWORD 值是一个 32 位( 4 个字节,即双字)长度的数值。在注册表编辑器中,您将发现系统会以十六进制的方式显示 DWORD 值。在编辑 DWORD 数值时,可以选择用十进制还是 16 进制的方式进行输入。
通过注册表设置文件关联,即将一个带有特殊后缀的文件连接到一个应用程序上。在注册表中,有四个子键都保存了文件管理的数据,它们分别是:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER。在缺省情况下,所有后缀为1ST的文件都被连接到记事本程序(Notepad)上。如果您在Windows资源管理器双击该后缀的文件,则系统将激活记事本,同时将此文件调入编辑。但是您也可此文件关联从Notepad改为Lotus Ami Pro(这也是一个字处理程序),则您在双击后缀为1ST的文件时,将激活Lotus Ami Pro程序,同时编辑此文件。但是,如果您在直接编辑注册表时只修改一个子键,则会出现如下四种情况:
● 如果只修改HKEY_CLASSES_ROOT中的1ST项,则在双击1ST后缀的文件时将激活Lotus Ami Pro。
● 如果只修改HKEY_CURRENT_USER中的1ST项,则在双击1ST后缀的文件时将激活Notepad。
● 如果只修改HKEY_LOCAL_MACHINE中的1ST项,则在双击1ST后缀的文件时将激活Lotus Ami Pro。
● 如果只修改HKEY_USER中的1ST项,则在双击1ST后缀的文件时将激活Notepad。
在上面的例子中,HKEY_CLASSES_ROOT子键和HKEY_LOCAL_MACHINE子键看起来在控制文件关联上相互独立,这似乎有些自相矛盾,但是,要知道HKEY_CLASSES_ROOT根键就是HKEY_LOCAL_MACHINE\Software\Classes,因此,在改变HKEY_CLASSES_ROOT根键就是改变HKEY_LOCAL_MACHINE。
在注册表中写文件关联(注:以下内容为原创)
假设我们要为.tpl格式的文件创建文件关联,用TPTL.exe应用程序打开.tpl格式的文件。
主要修改两个根键:HKEY_CLASSES_ROOT和HKEY_USERS
HKEY_CLASSES_ROOT的注册文件如下:
[HKEY_CLASSES_ROOT\.tpl]
@="TPLT"
"Content Type"="text/plain"
[HKEY_CLASSES_ROOT\.tpl\shell]
[HKEY_CLASSES_ROOT\.tpl\shell\open]
[HKEY_CLASSES_ROOT\.tpl\shell\open\command]
@="C:\Program Files\Produt Name\TPLT.exe"
注意:
1、@表示Default Value子键;
2、command的Default Value值应该为可执行程序的安装路径。
下面具体介绍在installshield中怎么写注册表:
1、单击installshield“Installation Designer”窗口中的“System Configuration”,选择“Registry”。在打开的“Destionation computer's Registry view”窗口中右击HKEY_CLASSES_ROOT根键,在弹出的快捷菜单中选择“New”/“key”,创建名为“.tpl”的项。
2、在.tpl项上右击,创建.tpl的default子键。在弹出的快捷菜单中选择“New”/“Default Value”,值为“TPLT”
3、用上述同样的方法,创建.tpl的Content Type子键。在弹出的快捷菜单中选择“New”/“String Value”,值为“text/plain”
按照上述相同的方法可创建其他的项和子键,不在重述。需要注意的是:command的Default Value应该为TARGETDIR中可执行程序的路径,可在Installtion Information中的“General Information”下的“Product Properties”查询。如我这儿的TARGETDIR是:
HKEY_USERS的注册文件为:
[HKEY_USERS\S-1-5-21-908939430-332475525-2491894801-3724\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tpl]
"Progid"="TPLT"
@="TPLT"
[HKEY_USERS\S-1-5-21-908939430-332475525-2491894801-3724\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tpl\OpenWithList]
@=""
"a"="TPLT.exe"
"MRUList"="ab"
"b"="TPLT.vshost.exe"
[HKEY_USERS\S-1-5-21-908939430-332475525-2491894801-3724\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tpl\OpenWithProgids]
"TPLT"=hex(0):
注意:
1、MRUList值项记录的是所运行程序命令的顺序。这里指先运行a程序“TPLT.exe”,再运行“TPLT.vshost.exe”程序。
2、OpenWithProgids的子键“TPLT”应该是Binary Value值hex(0)表示为“0000”的二进制值(长度为零的二进制)
修改完成,buid并检查是否注册成功。