我正在使用InstallShield 2014 Premier构建多实例安装程序并向注册表添加密钥(来自Registry表):
Registry | Root | Key | Name | Value | Component | ISAttributes
Registry34 | 2 | SOFTWARE\MyCompany\MyProduct\[InstanceId]\InstanceData | ENV | [ENV] | ISRegistryComponent | 0
安装后来自注册表的密钥:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyCompany\MyProduct\0\InstanceData
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyCompany\MyProduct\1\InstanceData
两者都包含我期望的值。但是,当我搜索它们时,我似乎找不到它们(RegLocator表):
Signature | Root | Key | Name | Type
NewSignature1 | 2 | SOFTWARE\MyCompany\MyProduct\[InstanceId]\InstanceData | ENV | 18
Appsearch表有ENV | NewSignature1
我已尝试在设置64位搜索标志的情况下进行各种尝试(类型中2比18)。
从卸载后的安装日志中,您将看到未使用注册表中的值设置ENV属性(' PROD'是ENV属性的默认值):
Action start 16:58:38: INSTALL.
MSI (s) (5C:C8) [16:58:38:080]: Running ExecuteSequence
MSI (s) (5C:C8) [16:58:38:080]: Doing action: AppSearch
Action start 16:58:38: AppSearch.
MSI (s) (5C:C8) [16:58:38:080]: Note: 1: 2262 2: Signature 3: -2147287038
MSI (s) (5C:C8) [16:58:38:081]: PROPERTY CHANGE: Adding IISROOTFOLDER property. Its value is 'C:\inetpub\wwwroot\'.
MSI (s) (5C:C8) [16:58:38:081]: Note: 1: 2262 2: Signature 3: -2147287038
MSI (s) (5C:C8) [16:58:38:081]: PROPERTY CHANGE: Adding DOTNETVERSION40FULL property. Its value is '#1'.
MSI (s) (5C:C8) [16:58:38:081]: Note: 1: 2262 2: Signature 3: -2147287038
MSI (s) (5C:C8) [16:58:38:081]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany\MyProduct\1\InstanceData 3: 2
MSI (s) (5C:C8) [16:58:38:081]: Note: 1: 2262 2: Signature 3: -2147287038
MSI (s) (5C:C8) [16:58:38:081]: PROPERTY CHANGE: Adding IIS_VERSION property. Its value is '#8'.
MSI (s) (5C:C8) [16:58:38:082]: Doing action: UpdateProductName_setProp
Action ended 16:58:38: AppSearch. Return value 1.
MSI (s) (5C:C8) [16:58:38:082]: PROPERTY CHANGE: Modifying ProductName property. Its current value is 'MyCompany MyProduct Server Components'. Its new value: 'MyCompany MyProduct Server Components - PROD'.
Action start 16:58:38: UpdateProductName_setProp.
我做错了什么?
答案 0 :(得分:1)
日志文件中的以下行包含您应该查看的信息:
MSI(5C:C8)[16:58:38:081]:注意:1:1402 2:HKEY_LOCAL_MACHINE \ SOFTWARE \ MyCompany \ MyProduct \ 1 \ InstanceData 3:2
以上一行解释如下: Windows安装程序错误代码1402,MSI SDK定义如下: 无法打开密钥:[2]。系统错误[3]。
系统错误代码2表示: ERROR_FILE_NOT_FOUND
日志文件清楚地表明找不到注册表项。我假设日志的片段是在RegLocator表中设置64位搜索标志的时候。 但是,您的注册表项是在32位配置单元(Wow6432Node)中创建的。
要解决此问题,您应该这样做:
- 将RegLocator表中Type类型下的值设置为2。 这将确保在32位配置单元中执行注册表搜索。
- 将属性ENV添加到SecureCustomProperties列表中。
可能这里发生的是,ENV属性的值不会传递给Execute序列。对于要传递给执行序列的属性的值,您需要保护属性,即。将ENV属性添加到Property表中的SecureCustomProperties。
执行此操作后,代码段应该开始工作。
通常,在正常情况下,公共属性的值从UI序列传递到执行序列。但是,可能存在锁定条件,其中属性需要显式添加到Property表中的SecureCustomProperties列表中,以便传播到Execute序列。
希望这有帮助。
此致
Kiran Hegde