2015-07-09 184 views
1

我建设使用InstallShield 2014超级多实例安装程序,并添加一个关键注册表(Registry表):Windows安装程序无法找到注册表项

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. 

什么时我做错了?

回答

1

在日志文件中的以下行有什么,你应该寻找的信息:

MSI(S)(5C:C8)[16:58:38:081]:注意:1:1402 2:HKEY_LOCAL_MACHINE \ SOFTWARE \ MyCompany的\ myProduct的\ 1 \ InstanceData 3:2

上面一行如下解释:1402 Windows安装错误代码,其MSI SDK定义如下: 无法打开关键:[2]。系统错误[3]。 2

系统错误代码表示:ERROR_FILE_NOT_FOUND

日志文件清楚地表明,该注册表项没有被发现。我假设日志的片段是在RegLocator表中设置了64位搜索标志的时候。 但是,您的注册表项是在32位配置单元(Wow6432Node)中创建的。

要解决这个问题,这是你应该做的事情:

- 设置在RegLocator表中的类型列下的价值为2 这将确保该注册表搜索的32位执行蜂巢。

- 将属性ENV添加到SecureCustomProperties列表中。

可能发生的情况是,属性ENV的值不会传递到执行序列中。对于要传递给执行序列的属性的值,您需要保护属性,即。在属性表中将ENV属性添加到SecureCustomProperties。

一旦你这样做了,你的代码段应该开始工作。

通常情况下,公共属性的值从UI序列传递到执行序列。但是,可能存在锁定条件,需要将属性显式添加到Property属性表中的SecureCustomProperties列表中以传播到执行序列。

希望这会有所帮助。

问候,

基兰赫格德

+0

谢谢。我发誓,在某些时候,我测试了64位搜索标志,但没有找到密钥,但我尝试了很多事情,以至于我可能会错过时间。我确实在SecureCustomProperties属性中有ENV,但是在某些时候InstallShield从Property表中删除了它(即它是安全的,但是没有属性条目),并且我可能一直在尝试该标志。 –

相关问题