15 InstallShield内部库函数全集十五注册表函数中文版Word下载.docx
《15 InstallShield内部库函数全集十五注册表函数中文版Word下载.docx》由会员分享,可在线阅读,更多相关《15 InstallShield内部库函数全集十五注册表函数中文版Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
在每应用程序路径项或应用程序卸载项下检索值。
RegDBGetKeyValueEx
从注册表的一项中检索一个值。
RegDBKeyExist
检测注册表项的存在。
RegDBQueryKey
对一项的子项和值名进行排队。
RegDBSetAppInfo
设置应用程序信息项下的一个值。
RegDBSetDefaultRoot
设置开关键。
RegDBSetItem
在每应用程序路径项或应用程序卸载项下赋值。
RegDBSetKeyValueEx
设置注册表入口。
SetInstallationInfo
指定CreateInstallationInfo使用的公司和产品信息。
15.1
CreateRegistrySet
语法:
CreateRegistrySet(szRegistrySet);
说明:
CreateRegistrySet函数创建由当前媒体中的一个或所有注册表组指定的注册表信息。
当前媒体的名称保存在系统变量MEDIA中。
一个注册表组可以和一个文件组相联系,因此仅当文件组已经被安装到目标系统上时,对CreateRegistrySet的调用才创建注册表组。
如果你正使用一个基于事件的脚本,任何和一个或多个文件组相联系的注册表组(使用注册表组的文件组属性)当安装那些文件组的任何一个时,它都被自动创建。
参数:
SzRegistrySet
指定当前媒体上的注册表组名。
为创建所有当前媒体上定义的注册表组,给该参数传递一个空字符串。
返回值:
0:
表明函数成功。
-7:
创建一项失败。
-8:
不能设置一个注册表项的值。
-9:
文本替换失败。
-10:
内存溢出。
-11:
未能从字符串表中取得一个值。
-12:
该函数在当前媒体上调用ComponentTransferData之前被调用。
注意ComponentTransferData在一个运行基于事件的脚本的安装中被自动调用。
-13:
未知错误。
注解:
·
系统变量MEDIA的值在安装初始化过程中被设置为‘DATA’。
如果你修改该变量的值来指向一个脚本创建的组件组,则你在调用CreateRegistrySet之前必须把值修改回‘DATA’。
该函数仅在已经调用ComponentTransferData后才能被调用。
15.2
CreateInstallationInfo
CreateInstallationInfo();
在一个基于事件的脚本中,CreateInstallationInfo函数在FirstUIBefore事件之后被自动调用。
它使用已经由SetInstallationInfo指定的信息来创建你正在安装的程序的一个应用程序信息项和每应用程序路径项。
应用程序信息项作为调用InstallationInfo的结果立即被创建。
每应用程序路径项则直到随后调用RegDBSetItem设置该项下的一个[Path]或[DefaultPath]值后才被创建。
CreatInstallationInfo提供显示在欢迎对话框中的产品名,也提供MaintenanceStart使用来初始化卸载日志文件的公司名,产品名和版本号。
如果脚本中在MaintenanceStart之前没有调用CreateInstallationInfo,则MaintenanceStart将失败。
在一个安装中只能调用CreateInstallationInfo一次。
如果你运行多个使用DoInstall的安装,每个安装当然可以有它自己的对CreateInstallationInfo的调用。
CreateInstallationInfo是一个特殊的注册表相关函数,设计为处理特定的预定义注册表项。
无。
<
0:
表明函数未能创建一个或多个注册表项。
你必须在调用下列要使用由SetInstallationInfo提供的信息的函数之前调用CreateInstallationInfo:
RegDBSetAppInfo,RegDBGetAppInfo,RegDBSetItem,RegDBGetItem。
更多信息可查看这些函数的说明。
由传递给SetInstallationInfo的值指定的每应用程序路径项直到调用RegDBSetItem设置该项下的值之后才真正被创建。
DeinstallSetReference(szReferenceFile);
如果该文件正被使用,卸载不执行。
最终用户必须关闭使用该文件的进程并再开始卸载。
你必须在调用DeinstallSetReference前调用DeinstallStart。
因为Windows和Windows应用程序中的特定限制,在很少情况下一个由DeinstallSetReference指定的文件可能看似被锁定。
szReferenceFile
指定在卸载进程开始前要检测的文件的全限定名。
该文件是只被要卸载的应用程序使用的一个程序或一个DLL。
表明函数失败。
为指定要检测的多个文件,可为每个文件调用该函数。
不要指定一个正被操作系统或其它应用程序使用的文件;
如果你这么做,最终用户将不能继续卸载。
15.4
DeinstallStart
DeinstallStart(szObsolete,svObsolete,szObsolete,lReserved);
DeinstallStart函数仅支持和由InstallShield先前版本创建的脚本兼容。
我们建议你使用MaintenanceStart函数来代替。
DeinstallStart函数通过在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\<
PRODUCT_GUID>
下创建下列值来激活卸载功能:
UninstallString
系统变量UNINST的值
DisplayName
传递给InstallationInfo第二个参数的值
LogFile
<
DISK1TARGET>
\Setup.ilg
DeinstallStart在一个安装脚本中必须只被执行一次。
然而,如果你运行多个使用DoInstall的脚本,那么你可以在一个安装中调用DeinstallStart多次,因为每个单个脚本可以调用DeinstallStart一次。
szObsolete
该参数的值被忽略。
svObsolete
你必须给该参数传递一个字符串值。
不返回有用信息。
lReserved
给该参数传递0。
不允许其它值。
表明函数成功创建注册表项值。
表明函数未能创建一个或多个注册表项值。
RegDBSetItem和RegDBGetItem函数设置和检索应用程序卸载项下的卸载图标名([DisplayName]值),它由调用DeinstallStart函数创建。
因此,根据要被设置或检索的值,RegDBSetItem和RegDBGetItem要求在它们被使用之前调用DeinstallStart。
在调用任何使用SHAREDFILE或LOCKEDFILE选项的函数前,并在调用SdFinishReboot前,应用程序信息项必须用InstallationInfo创建,应用程序卸载项必须用DeinstallStart函数创建。
Enable(LOGGING)激活记录卸载信息。
缺省时它被激活;
你需要调用Enable(LOGGING)仅更正前一个Disable(LOGGING)调用的影响。
15.5
InstallationInfo
InstallationInfo(szCompany,szProduct,szVersion,szProductKey);
InstallationInfo函数指定一个公司名,一个产品名,一个产品版本号和一个程序可执行文件名。
你指定的信息被用来为你安装的程序创建一个应用程序信息项和一个每应用程序路径项。
InstallationInfo提供显示在欢迎对话框中的产品名。
InstallationInfo提供DeinstallStart使用来初始化卸载日志文件的公司名,产品名和版本号。
如果脚本中在DeinstallStart之前没有调用InstallationInfo,则DeinstallStart将失败。
在一个安装中只能调用InstallationInfo一次。
如果你运行多个使用DoInstall的安装,每个安装当然可以有它自己的对InstallationInfo的调用。
InstallationInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
szCompany
指定公司名。
InstallShield使用szCompony来在注册表中的[HKEY_LOCAL_MACHINE]\Software项下创建一个\<
company>
项。
szProduct
指定要被安装的产品名。
InstallShield使用szProduct来在注册表中的[HKEY_LOCAL_MACHINE]\Software\<
项下创建一个\<
product>
SzProduct的值也被插入到欢迎对话框中的消息文本的第一段中。
szVersion
指定产品的版本号。
InstallShield使用szVersiont来在注册表中的[HKEY_LOCAL_MACHINE]\Software\<
\<
version>
合在一起,\<
项(szCompany),\<
项(szProduct),和\<
项(szVersion)被指定为应用程序信息项。
应用程序信息项在调用InstallationInfo时立即被创建。
szProductKey
应用程序的主可执行文件的文件名。
如果你使用几个可执行文件,指定最能代表产品的可执行文件。
InstallShield使用szProductKey来在项[HKEY_LOCAL_MACHINE]\Software\Microsoft\Windows\CurrentVersion\AppPaths下创建一个每应用程序路径项。
每应用程序路径项知道你调用RegDBSetItem创建该项下的一个数值名和数值数对后才真正在注册表中被创建。
表明函数未能如设置那样使用参数。
确认你使用了正确的语法。
该函数的任何参数都不允许空字符串。
你必须在调用下列函数之前调用InstallationInfo,因为它们使用InstallationInfo提供的信息:
更多信息请查看这些函数的说明。
由传递给InstallationInfo的值指定的每应用程序路径项直到调用RegDBSetItem设置该项下的值之后才真正被创建。
15.6
MaintenanceStart
MaintenanceStart();
MaintenanceStart函数创建在维护安装或卸载的初始化过程中使用的一个注册表项和相应值,并为添加/删除程序对话框提供应用程序信息。
如果你使用一个基于事件的脚本,MaintenanceStart在FirstUIBefore事件后被自动调用。
MaintenanceStart在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\<
下创建下列值:
系统变量UNINSTALL_STRING的值。
传递给SetInstallationInfo或InstallationInfo的第二个参数的值。
(SetInstallationInfo函数在Begin事件之前被自动调用,它的第二个参数等于PRODUCT_NAME字符串表入口。
)
\Setup.ilg
表明函数成功创建注册表项和它相应值。
表明函数未能创建注册表项和它相应值。
15.7
RegDBConnectRegistry
RegDBConnectRegistry(szRemoteSystem,nKeyType,nReserved);
RegDBConnectRegistry函数创建一个到一个远程注册表的连接。
如果你试图打开一个远程WindowsNT系统的注册表,你必须拥有管理员的特权。
如果你试图打开一个远程Windows95和更高的系统的注册表,则必须已经激活了远程管理。
该函数是给系统管理员使用来进行网络安装的。
一旦你已经打开了连接,你可以象对一个本地注册表一样对一个远程注册表进行创建、删除或检索注册表项、数值名和数值对。
RegDBConnectRegistry允许你每次打开远程注册表时只编辑一个注册表开关键,你只可以编辑HKEY_LOCAL_MACHINE或HKEY_USERS下的项和值。
当你调用RegDBConnectRegistry时,你必须指定你希望能编辑哪个开关键。
如果你想要编辑另一个开关键或它的一个子项,你必须关闭并重新打开该连接。
为编辑一个远程注册表,你必须只使用通用注册表相关函数(如下所列),它们被设计为可以处理所有注册表项:
RegDBCreateKeyEx、RegDBDeleteKey、RegDBDeleteValue、RegDBGetKeyValueEx
RegDBKeyExist、RegDBQueryKey、RegDBSetKeyValueEx
szRemoteSystem
指定要连接的系统名,如"
RemoteSys"
。
nKeyType
指定下列常量之一:
HKEY_LOCAL_MACHINE或HKEY_USERS.
nReserved
表明函数成功建立一个到系统注册表的连接。
REGDB_ERR_CONNECTIONEXISTS(-6):
一个到一个远程注册表的连接早已存在。
在你再次调用RegDBConnectRegistry之前必须用RegDBDisConnectRegistry关闭它。
REGDB_ERR_CORRUPTEDREGISTRY(-4):
表明远程注册表被破坏,不能被访问。
REGDB_ERR_INITIALIZATION(-2):
表明注册表服务不能被初始化。
确认远程管理已经被激活并且你有可以写注册表的适当特权。
REGDB_ERR_INVALIDHANDLE(-5):
提供给远程注册表的项名不被允许。
REGDB_ERR_INVALIDNAME(-3):
表明在szRemoteSystem中的系统不能被找到。
检查名称并重试。
-1:
其它错误。
自从你通过调用RegDBConnectRegistry设置了开关键,一旦你已经建立了一个到远程注册表的连接,你就不能调用RegDBSetDefaultRoot。
一旦你已经调用了RegDBDisConnectRegistry,所有对注册表相关函数的调用都会影响本地注册表,并且然后你可以调用RegDBSetDefaultRoot来修改开关键。
在一个卸载中,InstallShield将卸载为存入卸载记录中的任何项下的所有项。
由InstallShield自动创建的项将为存入卸载记录。
当你调用RegDBSetKeyValueEx创建项,在这些项以上没有存入卸载记录的项,你的项不会被卸载掉,不管存入是否被激活(你可以Enable和Disable登记)。
然而,当你调用RegDBCreateKeyEx来创建一个项,当存入被激活时,该项上没有存入卸载记录的项,你的项会存入卸载记录。
当存入项被删除时,你创建在该项下的所有项会被卸载。
更多信息可查询各个函数的说明。
15.8
RegDBCreateKeyEx
RegDBCreateKeyEx(szKey,szClass);
RegDBCreateKeyEx函数创建注册表中的一项。
你也可以将一个类对象和新创建的项联系起来(仅对高级用户)。
新创建的项没有一个和它相联系的值。
除非你另外指定,InstallShield将该项创建为HKEY_CLASSES_ROOT的子项。
你可以使用RegDBSetDefaultRoot来指定一个不同的开关键。
在一个项-子项表达式中用一个双反斜杠来分隔不同层。
如果它们不存在时,InstallShield将立即创建所有层。
当存入功能被激活时,由RegDBCreateKeyEx创建的项存入卸载记录。
然而,记住在一个多项表达式如Key1\Key2\Key3中,RegDBCreateKeyEx识别Key3为该函数调用所关系的项。
如DOS命令DIRC:
\Windows\System列出Windows系统文件夹中的文件,而不是Windows文件夹中的。
因此,Key3将被存入到卸载记录,但Key1和Key2不会。
有关Windows系统文件夹的信息,请查阅InstallShield系统变量WINSYSDIR的文档。
为在RegDBCreateKeyEx创建一个项和子项时确保正确地存入卸载记录,首先创建父项(存入功能激活时)。
当项的链中父项或高层项被创建后,然后创建父项下的子项。
被各自创建的父项的下面所有子项当父项被卸载时也会被卸载。
例如,为确保Key1和所有它的子项会被卸载,首先当存入被激活时用RegDBCreateKeyEx创建Key1。
然后你可以在一个单独的函数调用中或在各自的函数调用中创建Key2,Key3等等项。
当Key1被卸载,它下面的所有子项将被卸载。
记住当一个项被卸载时,它的所有子项也被卸载。
因此,如果你使用RegDBCreateKeyEx来创建一个已经被存入卸载记录的项下的项,那么当更高层的项被卸载时你所创建的项也被卸载,不管当你创建你的项时存入功能是否被激活,也不管你以什么次序创建你的项。
如果你正用RegDBCreateKeyE创建的项已经存在并且你没有禁用存入功能,则其它应用程序使用的项将被存入卸载记录。
在一个卸载过程中,该项将被卸载,这给那些使用该项的应用程序造成问题。
为避免该问题,在创建一个项前用RegDBKeyExist来检测它的存在性。
如果该项已经存在,使用RegDBCreateKeyEx来创建一个对你的应用程序唯一的子项。
然后,当卸载发生时,只有子项被删除。
如果你不希望首先检测项的存在性,当你创建该项时,你可以使用Disable函数来禁用存入功能。
在项被创建后再激活存入功能。
然而,记住该项不会和你的应用程序一个被卸载。
RegDBCreateKeyEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
szKey
指定要在四个开关键中的一个之下创建的项的名称。
用一个双反斜杠来分隔子项中的不同层。
szClass
指定和该项相联系的类名。
表明函数成功创建该子项。
表明函数未能创建该子项。
WindowsNT4.0不允许在HKEY_LOCAL_MACHINE下直接创建一个项。
15.9
RegDBDeleteKey
RegDBDeleteKey(szSubKey);
RegDBDeleteKey函数从注册表中删除一个特定项和与它相联系的值。
被删除项的所有子项及与它们相联系的值也被删除。
InstallShield假定由szSubKey指定的项是HKEY_CLASSES_ROOT的一个子项。
你可以使用RegDBSetDefaultRoot来指定另一个开关键。
RegDBDeleteKey是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
szSubKey
指定要删除的项的名称。
表明函数成功删除该项。
表明函数未能删除该项。
15.10
RegDBDeleteValue
RegDBDeleteValue(szSubKey,szValue);
RegDBDeleteValue函数从一个注册表的一个特定项中删除一个值。
InstallShield假定由szSubKey指定的项是HKEY_CLASSES_ROOT的一个子项。
指定注册表项的名称,该项包含要删除的值名。
szValue
指定你要删除的值的名称。
表明函数成功删除该值。
表明函数未能删除该值。
15.11
RegDBDisConnectRegistry
RegDBDisConnectRegistry(nReserved);
RegDBDisConnectRegistry函数关闭调用RegDBConnectRegistry建立的到一个远程注册表的一个连接。
调用