我正在创建一个基于msi的安装程序(使用InstallShield),该安装程序具有启动嵌套安装的自定义操作。自定义操作的类型为23,源字段指的是位于源媒体上的第二个msi,目标字段包含“ALLUSERS = [ALLUSERS] ADDLOCAL = ALL”。自定义操作在OnInstallFilesActionAfter操作之后的InstallExecuteSequence中启动,条件& FEATURE = 3,以便在安装某个功能时安装它。
执行全新安装时,将执行自定义操作并正确安装第二个msi。在没有提到功能的情况下进行安装并在之后执行“修改”安装时,如果选择了该功能,则会出现msi错误2335。在第二个msi的PublishProduct操作期间显示错误,确切的错误消息是“DEBUG:错误2335:路径:C:\ WINDOWS \ Installer \不是{local-setup-folder}的父级”(其中{ local-setup-folder}将替换为安装时第二个msi所在的文件夹。
我猜错误来自以下事实:当运行“修改”时,操作23的源文件夹被设置为缓存的.msi文件的文件夹,而不是最初安装产品的文件夹。如何防止错误2335出现?
答案 0 :(得分:0)
我终于通过为要安装的.msi文件创建转换来解决此问题。转换添加自定义操作类型51以将ParentOriginalDatabase
属性设置为[SOURCEDIR]mainproduct.msi
,其中mainproduct.msi是父安装的.msi文件。自定义操作将作为PublishProduct之前的操作插入InstallExecuteSequence
。丑陋,但它确实有效。
PublishAction
操作中的错误2335来自ParentOriginalDatabase
和OriginalDatabase
属性必须在相同或直接子文件夹中指定.msi文件的事实。