Installshield 12:在运行时更改合并模块的目标

时间:2010-02-16 10:44:16

标签: merge module installshield

我正在尝试在运行时更改合并模块的目标...

让我解释一下: 我有一个合并模块,其目标设置为[SystemFolder]文件夹。

我有很多MSI项目指向这个合并模块,所有项目都将合并模块(Component)目标指向'(使用合并模块的默认目标)'。

问题: 其中一个MSI项目需要将合并模块安装到“公共文件”位置(而不是systyem32文件夹)。

因此,如果我将MSI项目中的合并模块(Component)目标更改为[CommonFileFolder],则不会发生任何事情(因为合并模块目标仍设置为[SystemFolder])

或者,如果我将合并模块目标更改为[TARGETDIR],然后将MSI项目中的合并模块(组件)目标更改为[CommonFileFolder],则可以正常工作。但是然后我的所有其他MSI项目都会将合并模块安装到根驱动器,因为其他MSI项目仍然将合并模块(组件)目标指向'(使用合并模块的默认目标)'。

我不能做这两件事: 我不想将每个MSI项目更改为[SystemFolder]或[CommonFileFolder]。

我也不想创建两个相同的合并模块(一个指向[SystemFolder],另一个指向[CommonFileFolder]),所以我只需要更改一个MSI项目

如果MSI项目将合并模块指向'(使用合并模块的默认目标),它们是否可以更改合并模块目标?

例如: 如果TARGETDIR ='(使用合并模块的默认目的地)'然后设置TARGETDIR = [SystemFolder] Else使用[TARGETDIR]

还是有其他方法可以解决这个问题吗?

由于 BillyBobLee

1 个答案:

答案 0 :(得分:5)

在合并模块中创建组件时,将目标保留为INSTALLDIR。

在基本msi项目(可再发行组件视图)中使用合并模块时,右键单击合并模块并选择属性。然后使用“目标”下拉列表配置关系。合并模块中的文件现在将转到您告诉它的位置。

旁注,合并后,合并模块不再存在。看看Orca中构建的MSI,你会看到有一些目录表条目看起来像这样(我们假设你为SystemFolder配置了模块)

DIR | DIR_PARENT | DEFAULTDIR

TARGETDIR SourceDir ProgramFilesFolder TARGETDIR。:PROGRA~1 |程序文件 ISMyCompanyDir ProgramFilesFolder MYCOMP~1 |我的公司名称 ISMyProductDir ISMyCompanyDir MYPROD~1 |我的产品名称 INSTALLDIR IsMyProductDir。 INSTALLDIR.SOMEGUID SystemFolder。

“。”代表'当前目录'或'与父母相同'。

因此,在这种情况下,您构建INSTALLDIR = C:\ Program Files \ My Company Name \ My ProductName \和INSTALLDIR.SOMEGUID = C:\ Windows \ System32

有意义吗?通过这种方式,您可以在部署到不同位置的不同产品中使用该模块。