Windows installer 如何在修改已安装的产品时防止msi错误2335?

Windows installer 如何在修改已安装的产品时防止msi错误2335?,windows-installer,Windows Installer,我正在创建一个基于msi的安装程序(使用InstallShield),该安装程序具有启动嵌套安装的自定义操作。自定义操作类型为23,源字段指位于源媒体上的第二个msi,目标字段包含“ALLUSERS=[ALLUSERS]ADDLOCAL=ALL”。自定义操作在OnInstallFilesActionAfter操作之后的InstallExecuteSequence中启动,条件为&FEATURE=3,以便在安装特定功能时安装 进行新安装时,将执行自定义操作,并正确安装第二个msi。如果在没有上述功能

我正在创建一个基于msi的安装程序(使用InstallShield),该安装程序具有启动嵌套安装的自定义操作。自定义操作类型为23,源字段指位于源媒体上的第二个msi,目标字段包含“ALLUSERS=[ALLUSERS]ADDLOCAL=ALL”。自定义操作在OnInstallFilesActionAfter操作之后的InstallExecuteSequence中启动,条件为&FEATURE=3,以便在安装特定功能时安装

进行新安装时,将执行自定义操作,并正确安装第二个msi。如果在没有上述功能的情况下安装,并在选择该功能后进行“修改”安装,则会出现msi错误2335。该错误在第二个msi的PublishProduct操作期间显示,确切的错误消息是“DEBUG:error 2335:Path:C:\WINDOWS\Installer\不是{local setup folder}的父级”(其中{local setup folder}被替换为第二个msi安装时所在的文件夹)


我猜错误是因为在运行“修改”操作时,操作23的源文件夹被设置为缓存的.msi文件的文件夹,而不是最初安装产品的文件夹。如何防止出现错误2335?

我最终解决了这个问题,为要安装的.msi文件创建了一个转换。转换添加了自定义操作类型51,以将
ParentOriginalDatabase
属性设置为
[SOURCEDIR]mainproduct.msi
,其中mainproduct.msi是父安装的.msi文件。自定义操作作为发布产品之前的操作插入到
InstallExecuteSequence
中。很难看,但很管用

PublishAction
操作中的错误2335是因为
ParentOriginalDatabase
OriginalDatabase
属性必须在同一子文件夹或直接子文件夹中指定.msi文件