InstallShield内部库函数全集十五-注册表函数

2024-01-20 11:08

本文主要是介绍InstallShield内部库函数全集十五-注册表函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

15  注册表函数
下列函数允许你访问注册表,读、创建和删除注册表项,和为卸载建立注册表相关参数。
CreateCreateInstallationInfo
为你安装的程序创建一个应用程序信息项和一个每应用程序路径项。
CreateRegistrySet
创建在资源窗格的注册表入口文件夹中指定注册表入口的一组或所有组。
DeinstallSetReference
指定在卸载进程开始前要检测的参考文件。
DeinstallStart
创建应用程序卸载项和设置该项下的[UninstallString]值。
InstallationInfo
根据公司名、产品名和产品版本号来创建注册表项。
MaintenanceStart
通过创建注册表项来激活卸载功能。
RegDBConnectRegistry
打开到一个远程注册表的连接。
RegDBCreateKeyEx
在注册表中创建一项。也允许你将一个类对象和一个注册表项联系起来(仅对高级用户)。
RegDBDeleteKey
从注册表中删除指定项。
RegDBDeleteValue
从一个指定注册表项中删除一个值。
RegDBDisConnectRegistry
关闭到一个远程注册表的连接。
RegDBGetAppInfo
在一个应用程序信息项下检索一个值。
RegDBGetItem
在每应用程序路径项或应用程序卸载项下检索值。
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函数在First UI Before事件之后被自动调用。它使用已经由SetInstallationInfo指定的信息来创建你正在安装的程序的一个应用程序信息项和每应用程序路径项。应用程序信息项作为调用InstallationInfo的结果立即被创建。每应用程序路径项则直到随后调用RegDBSetItem设置该项下的一个[Path] 或 [DefaultPath]值后才被创建。
    CreatInstallationInfo提供显示在欢迎对话框中的产品名,也提供MaintenanceStart使用来初始化卸载日志文件的公司名,产品名和版本号。如果脚本中在MaintenanceStart 之前没有调用CreateInstallationInfo,则MaintenanceStart将失败。在一个安装中只能调用CreateInstallationInfo一次。如果你运行多个使用DoInstall的安装,每个安装当然可以有它自己的对CreateInstallationInfo的调用。CreateInstallationInfo是一个特殊的注册表相关函数,设计为处理特定的预定义注册表项。
参数:
无。
返回值:
0:表明函数成功。
< 0:表明函数未能创建一个或多个注册表项。
注解:
·你必须在调用下列要使用由SetInstallationInfo提供的信息的函数之前调用CreateInstallationInfo:RegDBSetAppInfo, RegDBGetAppInfo, RegDBSetItem, RegDBGetItem。更多信息可查看这些函数的说明。
·由传递给SetInstallationInfo的值指定的每应用程序路径项直到调用RegDBSetItem设置该项下的值之后才真正被创建。
DeinstallSetReference
语法:DeinstallSetReference (szReferenceFile);
说明:指定在卸载进程开始前要检测的参考文件。如果该文件正被使用,卸载不执行。最终用户必须关闭使用该文件的进程并再开始卸载。你必须在调用DeinstallSetReference前调用DeinstallStart。
因为Windows和 Windows应用程序中的特定限制,在很少情况下一个由DeinstallSetReference指定的文件可能看似被锁定。
参数:
szReferenceFile
指定在卸载进程开始前要检测的文件的全限定名。该文件是只被要卸载的应用程序使用的一个程序或一个DLL。
返回值:
0:表明函数成功。
< 0:表明函数失败。
注解:
·为指定要检测的多个文件,可为每个文件调用该函数。不要指定一个正被操作系统或其它应用程序使用的文件;如果你这么做,最终用户将不能继续卸载。
15.4  DeinstallStart
语法:DeinstallStart (szObsolete, svObsolete, szObsolete, lReserved);
说明:DeinstallStart函数仅支持和由InstallShield先前版本创建的脚本兼容。我们建议你使用MaintenanceStart函数来代替。
DeinstallStart函数通过在注册表项HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/ CurrentVersion/Uninstall/ 下创建下列值来激活卸载功能:
UninstallString  系统变量UNINST的值
DisplayName  传递给InstallationInfo第二个参数的值
LogFile  /Setup.ilg
DeinstallStart在一个安装脚本中必须只被执行一次。然而,如果你运行多个使用DoInstall的脚本,那么你可以在一个安装中调用DeinstallStart多次,因为每个单个脚本可以调用DeinstallStart一次。
参数:
szObsolete
该参数的值被忽略。
svObsolete
你必须给该参数传递一个字符串值。不返回有用信息。
szObsolete
该参数的值被忽略。
lReserved
给该参数传递0。不允许其它值。
返回值:
0:表明函数成功创建注册表项值。
< 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的结果立即被创建。每应用程序路径项则直到随后调用RegDBSetItem设置该项下的一个[Path] 或 [DefaultPath]值后才被创建。
    InstallationInfo提供显示在欢迎对话框中的产品名。InstallationInfo提供DeinstallStart使用来初始化卸载日志文件的公司名,产品名和版本号。如果脚本中在DeinstallStart 之前没有调用InstallationInfo,则DeinstallStart将失败。
    在一个安装中只能调用InstallationInfo一次。如果你运行多个使用DoInstall的安装,每个安装当然可以有它自己的对InstallationInfo的调用。
InstallationInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
szCompany
指定公司名。InstallShield使用szCompony来在注册表中的[HKEY_LOCAL_MACHINE] /Software项下创建一个/ 项。
szProduct
指定要被安装的产品名。InstallShield使用szProduct来在注册表中的[HKEY_LOCAL_ MACHINE]/Software/ 项下创建一个/ 项。SzProduct的值也被插入到欢迎对话框中的消息文本的第一段中。
szVersion
指定产品的版本号。InstallShield使用szVersiont来在注册表中的[HKEY_LOCAL_MACHINE] /Software/ / 项下创建一个/ 项。合在一起,/ 项 (szCompany), / 项(szProduct), 和/ 项(szVersion)被指定为应用程序信息项。应用程序信息项在调用InstallationInfo时立即被创建。
szProductKey
应用程序的主可执行文件的文件名。如果你使用几个可执行文件,指定最能代表产品的可执行文件。InstallShield 使用szProductKey来在项[HKEY_LOCAL_MACHINE]/Software /Microsoft/Windows/CurrentVersion/App Paths下创建一个每应用程序路径项。每应用程序路径项知道你调用RegDBSetItem创建该项下的一个数值名和数值数对后才真正在注册表中被创建。
返回值:
0:表明函数成功。
< 0:表明函数未能如设置那样使用参数。确认你使用了正确的语法。该函数的任何参数都不允许空字符串。
注解:
·你必须在调用下列函数之前调用InstallationInfo,因为它们使用InstallationInfo提供的信息:RegDBSetAppInfo, RegDBGetAppInfo, RegDBSetItem, RegDBGetItem。更多信息请查看这些函数的说明。
·由传递给InstallationInfo的值指定的每应用程序路径项直到调用RegDBSetItem设置该项下的值之后才真正被创建。
15.6  MaintenanceStart
语法:MaintenanceStart ( );
说明:MaintenanceStart函数创建在维护安装或卸载的初始化过程中使用的一个注册表项和相应值,并为添加/删除程序对话框提供应用程序信息。如果你使用一个基于事件的脚本,MaintenanceStart在First UI Before事件后被自动调用。
MaintenanceStart在注册表项HKEY_LOCAL_MACHINE/Software/Microsoft/Windows /CurrentVersion/Uninstall/ 下创建下列值:
UninstallString  系统变量UNINSTALL_STRING的值。
DisplayName  传递给SetInstallationInfo 或 InstallationInfo的第二个参数的值。
  (SetInstallationInfo函数在Begin事件之前被自动调用,它的第二个参数等于PRODUCT_NAME字符串表入口。)
LogFile  /Setup.ilg
参数:
无。
返回值:
0:表明函数成功创建注册表项和它相应值。
< 0:表明函数未能创建注册表项和它相应值。
15.7  RegDBConnectRegistry
语法:RegDBConnectRegistry (szRemoteSystem, nKeyType, nReserved);
说明:RegDBConnectRegistry函数创建一个到一个远程注册表的连接。如果你试图打开一个远程Windows NT 系统的注册表,你必须拥有管理员的特权。如果你试图打开一个远程Windows 95 和更高的系统的注册表,则必须已经激活了远程管理。该函数是给系统管理员使用来进行网络安装的。
    一旦你已经打开了连接,你可以象对一个本地注册表一样对一个远程注册表进行创建、删除或检索注册表项、数值名和数值对。RegDBConnectRegistry允许你每次打开远程注册表时只编辑一个注册表开关键,你只可以编辑HKEY_LOCAL_MACHINE 或 HKEY_USERS下的项和值。当你调用RegDBConnectRegistry时,你必须指定你希望能编辑哪个开关键。如果你想要编辑另一个开关键或它的一个子项,你必须关闭并重新打开该连接。
为编辑一个远程注册表,你必须只使用通用注册表相关函数(如下所列),它们被设计为可以处理所有注册表项:
RegDBCreateKeyEx、RegDBDeleteKey、RegDBDeleteValue、RegDBGetKeyValueEx
RegDBKeyExist、RegDBQueryKey、RegDBSetKeyValueEx
参数:
szRemoteSystem
指定要连接的系统名,如"RemoteSys"。
nKeyType
指定下列常量之一:
HKEY_LOCAL_MACHINE 或 HKEY_USERS.
nReserved
给该参数传递0。不允许其它值。
返回值:
0:表明函数成功建立一个到系统注册表的连接。
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命令DIR C:/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
指定和该项相联系的类名。
返回值:
0:表明函数成功创建该子项。
< 0:表明函数未能创建该子项。
注解:
·Windows NT 4.0不允许在HKEY_LOCAL_MACHINE下直接创建一个项。
15.9  RegDBDeleteKey
语法:RegDBDeleteKey (szSubKey);
说明:RegDBDeleteKey函数从注册表中删除一个特定项和与它相联系的值。被删除项的所有子项及与它们相联系的值也被删除。
    InstallShield假定由szSubKey指定的项是HKEY_CLASSES_ROOT的一个子项。你可以使用RegDBSetDefaultRoot来指定另一个开关键。
RegDBDeleteKey是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szSubKey
指定要删除的项的名称。用一个双反斜杠来分隔子项中的不同层。
返回值:
0:表明函数成功删除该项。
< 0:表明函数未能删除该项。
15.10  RegDBDeleteValue
语法:RegDBDeleteValue (szSubKey, szValue);
说明:RegDBDeleteValue函数从一个注册表的一个特定项中删除一个值。InstallShield假定由szSubKey指定的项是HKEY_CLASSES_ROOT的一个子项。你可以使用RegDBSetDefaultRoot来指定另一个开关键。
参数:
szSubKey
指定注册表项的名称,该项包含要删除的值名。用一个双反斜杠来分隔子项中的不同层。
szValue
指定你要删除的值的名称。
返回值:
0:表明函数成功删除该值。
< 0:表明函数未能删除该值。
15.11  RegDBDisConnectRegistry
语法:RegDBDisConnectRegistry (nReserved);
说明:RegDBDisConnectRegistry函数关闭调用RegDBConnectRegistry建立的到一个远程注册表的一个连接。
    调用RegDBDisConnectRegistry后,所有对安装脚本注册表相关函数的调用都会影响本地系统注册表。更多信息请查阅特殊注册表相关函数。
参数:
nReserved
给该参数传递0。不允许其它值。
返回值:
0:表明函数成功关闭一个到远程系统上的注册表的连接。
< 0:表明函数未能关闭注册表连接。
15.12  RegDBGetAppInfo
语法:RegDBGetAppInfo (szName, nvType, svValue, nvSize);
说明:RegDBGetAppInfo函数从注册表中检索你的主应用程序的应用程序信息项下的一个特定数值名的值。应用程序信息项由InstallShield创建,作为调用InstallationInfo的结果。在调用RegDBGetAppInfo之前,你必须调用InstallationInfo来创建一个应用程序信息项。
RegDBGetAppInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
szName
指定要检索的值的数值名。
nvType
返回下列预定义常量之一,它们标识在svValue返回的数据的类型:
REGDB_STRING:字符串变量,不允许换行符。
REGDB_STRING_EXPAND:字符串变量保持一种可扩展的环境变量表达式,如"%MYPATH%"。
REGDB_STRING_MULTI:字符串变量,允许换行符。
REGDB_NUMBER:看作为一个字符串的数字表达式,并可传递给字符串变量。
REGDB_BINARY:将二进制数据保存在一个字符串中。
svValue
返回由szName指定的数值名的值。
nvSize
以字节数返回返回值的大小。
返回值:
0:表明函数成功检索该值。
< 0:表明函数未能检索该值。
15.13  RegDBGetItem
语法:RegDBGetItem (nItem, svValue);
说明:RegDBGetItem函数根据nItem的值检索每应用程序路径项或应用程序卸载项下的值。这些项InstallShield 创建,作为调用InstallationInfo的结果。在调用RegDBGetItem之前,你必须调用InstallationInfo来创建一个应用程序信息项。
RegDBGetItem是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
nItem
指定要检索的项。在该参数位置传递下列预定义常量之一:
REGDB_APPPATH:每应用程序路径项下[Path]的值。
REGDB_APPPATH_DEFAULT:每应用程序路径项下[DefaultPath]的值。
REGDB_UNINSTALL_NAME:卸载项下[DisplayName]的值。当该常量被使用时,szValue指定显示在控制面板中可卸载应用程序列表中的应用程序名。
svValue
返回该项的值。
返回值:
0:表明函数成功检索该项目的值。
< 0:表明函数未能检索该项目的值。确认你在使用该函数之前使用了InstallationInfo函数。
注解:
·在调用RegDBGetItem函数(nItem为REGDB_APPPATH 或 REGDB_APPPATH_DEFAULT选项)前,你必须用InstallationInfo函数创建每应用程序路径项。在调用RegDBGetItem函数(nItem为REGBD_UNINSTALL_NAME)前,你必须调用DeinstallStart函数来创建卸载项,并给应用程序卸载项下的[DisplayName]赋一个值。
15.14  RegDBGetKeyValueEx
语法:RegDBGetKeyValueEx (szKey, szName, nvType, svValue, nvSize);
说明:RegDBGetKeyValueEx函数检索注册表中一个指定项下一个特定数值名的值。缺省时,InstallShield假定该项是HKEY_CLASSES_ROOT下的一个子项。你可以用RegDBSetDefaultRoot来指定另一个开关键。
RegDBGetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szKey
指定其值要被检索的项的名称。用一个双反斜杠来分隔子项中的不同层。
szName
指定在szKey下其值要被检索的数值的数值名。要检索项的缺省值,则传递一个空字符串。
nvType
返回下列预定义常量之一,它们标识在svValue返回的数据的类型:
请参阅15.12中该部分的说明。
svValue
返回由szKey和svName 指定的值。注意一个数值型值以一个字符串返回。
nvSize
以字节数返回在svValue返回的值的大小。
返回值:
0:表明函数成功检索该值。
< 0:表明函数未能检索该值。
注解:
一个Windows NT平台上,当检索REGDB_STRING_MULTI数据类型时,带空字符串为参数调用StrGetTokens来将多个以空字符串为中止的字符串分析到一个字符串列表。也就是,如果svValue在调用RegDBGetKeyValueEx后有多个结果字符串,StrGetTokens( listID, svValue, "")可以被使用来分析字符串并把它们放到一个由listID指向的字符串列表。
15.15  RegDBKeyExist
语法:RegDBKeyExist (szSubKey);
说明:RegDBKeyExist函数检测注册表中一个特定项的存在性。缺省时,InstallShield假定该项是HKEY_CLASSES_ROOT下的一个子项。你可以用RegDBSetDefaultRoot来指定另一个开关键。
RegDBKeyExist是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szSubKey
指定要查找的项的名称。你不必要在该参数包括HKEY_CLASSES_ROOT项(或你指定的其它项)。用一个双反斜杠来分隔子项的不同层。
返回值:
1:表明函数成功找到注册表中的项。
< 0:表明函数未能找到注册表中的项。
15.16  RegDBQueryKey
语法:RegDBQueryKey (szSubKey, nItem, listResults);
说明:RegDBQueryKey函数允许用户排队一个项的子项和值名。使用该函数可以在运行时动态列举这些项。
RegDBQueryKey是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szSubKey
指定先前调用RegDBSetDefaultRoot设置的开关键中某一个的子项。使用反斜杠来指定子项的更深层。为检索开关键,传递一个空字符串。
nItem
指定必须被放置在列表中的项目。在该参数位置传递下列预定义常量之一:
REGDB_KEYS:在listResult 返回的字符串列表将包含一个该项下的所有子项的列表。
REGDB_NAMES:在listResult 返回的字符串列表将包含该项的所有命名值的名。
listResults
返回在一个字符串列表中排队的结果。由listResult标识的列表必须已经通过调用ListCreat而被初始化。
返回值:
0:表明函数成功。
< 0:表明函数失败。
15.17  RegDBSetAppInfo
语法:RegDBSetAppInfo (szName, nType, szValue, nSize);
说明:RegDBSetAppInfo函数设置注册表中应用程序信息项下的一个特定数值名的值。你在调用RegDBSetAppInfo前必须调用InstallationInfo来创建一个应用程序信息项。
RegDBSetAppInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
szName
指定其信息要被设置的数值名。
nType
指定你要设置的数据的类型,在该参数位置传递下列预定义常量之一:
请参阅15.12中该部分的说明。
szValue
指定为数值名设置的值。
nSize
以字节数返回传递给RegDBSetAppInfo的数据的大小。给该参数传递-1来表明InstallShield应该确定该数据的大小。
返回值:
0:表明函数成功给数值名赋值。
< 0:表明函数未能赋值。
15.18  RegDBSetDefaultRoot
语法: RegDBSetDefaultRoot (nRootKey);
说明:RegDBSetDefaultRoot函数设置一个被其它注册表函数使用的开关键。大多数InstallShield注册表函数工作在以HKEY_CLASSES_ROOT为注册表树的缺省根。使用该函数,你可以指定另一个项,如HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER 或 HKEY_USERS为开关键。
RegDBGetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
你可以使用RegDBSetDefaultRoot来修改使用特殊注册表相关函数创建或处理项的开关键。
参数:
nRootKey
指定设置为开关键的项的名。
返回值:
0:表明函数成功设置项。
< 0:表明函数未能设置项。
注解:
·Windows NT 4.0不允许在HKEY_LOCAL_MACHINE下直接创建一个项。
15.19  RegDBSetItem
语法:RegDBSetItem (nItem, szValue);
说明:RegDBSetItem函数给每应用程序路径项或应用程序卸载项下赋值,根据nItem的值而定。以REGDB_APPPATH或 REGDB_APPPATH_DEFAULT选项调用RegDBSetItem则结果创建每应用程序路径项。注意你必须在调用RegDBSetItem之前调用InstallationInfo来创建这些项。
RegDBSetItem是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
nItem
指定要设置的项目(条目)。在该参数位置传递下列预定义常量之一:
REGDB_APPPATH:在每应用程序路径项下的[Path]值。
REGDB_APPPATH_DEFAULT:在每应用程序路径项下的[DefaultPath]值。
REGDB_UNINSTALL_NAME:卸载项下的[DisplayName]值。当使用该常量时,szValue指定在控制面板中卸载应用程序列表中的显示的应用程序名。
szValue
指定赋给指定项目的值。
返回值:
0:表明函数成功设置值。
< 0:表明函数失败。最通常的失败原因是没有前调用InstallationInfo函数。该函数只有在你调用InstallationInfo后才能被执行。
注解:
·在使用REGDB_APPPATH 或REGDB_APPPATH_DEFAULT选项(它们将影响创建每应用程序路径项,也影响在其下写一个值)调用RegDBSetItem函数之前,你必须调用InstallationInfo函数来提供被使用来创建该项的信息。
·当你调用MaintenanceStart 或DeinstallStart函数时,[UninstallString]值被创建。
15.20  RegDBSetKeyValueEx
语法:RegDBSetKeyValueEx (szKey, szName, nType, szValue, nSize);
说明:RegDBSetKeyValueEx函数设置注册表中一个项下指定的数值名的值。如果该项不存在,RegDBSetKeyValueEx将会为你创建它。然而,新创建的项不会存入卸载记录除非它是一个已经存入卸载记录的项的子项。如下情况项会存入卸载记录:
当它们使用RegDBCreateKeyEx而被创建。
当存入功能被激活时。
当它们在安装进程中由InstallShield自动被创建。
当它们作为调用一个特殊注册表相关函数的结果而被创建。
如果数值名不存在,RegDBSetKeyValueEx创建它。如果数值数已经存在,RegDBSetKeyValueEx改写它。InstallShield假定szKey中的数值名是HKEY_CLASSES_ROOT项的一个子项。如果你想要使用一个不同的主项,则使用RegDBSetDefaultRoot函数来设置该主开关键。
RegDBSetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szKey
指定要设置的项的名;该项必须已经由RegDBCreateKeyEx创建。你不必要在该参数包括HKEY_CLASSES_ROOT项(或你指定的其它项)。用一个双反斜杠来分隔子项的不同层。
szName
指定要被设置的数值数的数值名。为设置在szKey指定的项的缺省值,给该参数传递一个空字符串。
nType
指定你要设置的数据的类型,在该参数位置传递下列预定义常量之一:
请参阅15.12中该部分的说明。
szValue
指定和数值名相联系的值。所有值必须以字符串变量传递。数字必须表示为字符串(InstallShield内部将它们转换为数字)。
nSize
以字节数指定要被设置的数据的大小。当nType是REGDB_STRING, REGDB_STRING_EXPAND, 或 REGDB_NUMBER时,你可以将该参数指定为-1,InstallShield会设置其大小。然而,当nType为REGDB_BINARY和 REGDB_STRING_MULTI时,你必须总指定你在保存的二进制数据的字节数。
返回值:
0:表明函数成功设置该项。
< 0:表明函数未能设置该项。
15.21  SetInstallationInfo
语法:SetInstallationInfo (szCompany, szProduct, szVersion, szProductKey);
说明:在一个基于事件的脚本中,SetInstallationInfo函数在 Begin事件之前被自动调用,以字符串表表目COMPANY_NAME, PRODUCT_NAME, PRODUCT_VERSION, 和 PRODUCT_KEY为其参数。SetInstallationInfo指定该信息由CreateInstallationInfo(它在一个基于事件脚本中就在First UI Before事件后被自动调用来创建你正在安装的程序的一个应用程序信息项和一个每应用程序路径项)使用。
SetInstallationInfo是一个特殊注册表相关函数,设计为可工作于特定预定义的注册表项。
参数:
szCompany
指定公司名。CreateInstallationInfo使用szCompany来创建注册表中[HKEY_LOCAL_ MACHINE]/Software项下的/ 项。
szProduct
指定被安装的产品的名称。CreateInstallationInfo使用szProduct来创建注册表中[HKEY_LOCAL_MACHINE]/Software/ 项下的/ 项。SzProduct的值也被插入到欢迎对话框中消息文本的第一段中。
szVersion
指定产品的版本号。InstallShield使用szVersiont来在注册表中的[HKEY_LOCAL_MACHINE] /Software/ / 项下创建一个/ 项。合在一起,/ 项 (szCompany), / 项(szProduct), 和/ 项(szVersion)被指定为应用程序信息项。应用程序信息项在调用InstallationInfo时立即被创建。
szProductKey
应用程序的主可执行文件的文件名。如果你使用几个可执行文件,指定最能代表产品的可执行文件。InstallShield 使用szProductKey来在项[HKEY_LOCAL_MACHINE]/Software /Microsoft/Windows/CurrentVersion/App Paths下创建一个每应用程序路径项。每应用程序路径项知道你调用RegDBSetItem创建该项下的一个数值名和数值数对后才真正在注册表中被创建。
返回值:
该函数总返回0。

这篇关于InstallShield内部库函数全集十五-注册表函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625807

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^