Windows installer InstallShield Basic MSI中的SetTargetPath事件如何工作?

Windows installer InstallShield Basic MSI中的SetTargetPath事件如何工作?,windows-installer,installshield,Windows Installer,Installshield,我有一个产品,需要安装到多个驱动器和目录,其中一些可以自定义。所以我在看InstallShield基本MSI项目中目录在运行时是如何更改的。我看到DestinationFolder和InstallChangeFolder对话框协同工作,使用SetTargetPath事件,在OK按钮上按下InstallChangeFolder来更改INSTALLDIR目录 我不明白的是为什么SetTagetPath只有一个参数。MsiSetTargetPath函数除了安装句柄外还需要2个参数,因此我不明白为什么S

我有一个产品,需要安装到多个驱动器和目录,其中一些可以自定义。所以我在看InstallShield基本MSI项目中目录在运行时是如何更改的。我看到
DestinationFolder
InstallChangeFolder
对话框协同工作,使用
SetTargetPath
事件,在
OK
按钮上按下
InstallChangeFolder
来更改
INSTALLDIR
目录

我不明白的是为什么
SetTagetPath
只有一个参数。
MsiSetTargetPath
函数除了安装句柄外还需要2个参数,因此我不明白为什么
SetTargetPath
事件只需要1个参数。我想设置一个指定的目录变量来引用指定的目录。这需要两个参数。只有一个参数,他们怎么过得去


我已经读了3遍,但仍然没有任何意义。

似乎
SetTargetPath
的目的是将属性中的更新值传输到同名的目录变量,并在此过程中对旧值和新值(分别在目录变量和属性值中)执行一些验证。因此,将新值传输到目录变量似乎分两步进行:

  • 将同名属性设置为新值
  • 调用
    SetTargetPath
    提供属性名称,将属性中的值复制到目录中
  • 在执行此操作时,请注意,如果提供的属性为括号,则它将引用另一个属性名称。因此,如果要复制到目录变量的值直接位于属性中,则不要使用括号。

    您要研究“文件成本计算”(成本初始化、成本最终确定)。在计算成本之前,您可以使用类型51设置属性自定义操作。成本计算后,您必须使用类型35设置目录自定义操作。这是因为成本需要重新计算


    我注意到你有很多MSI问题。你可能想读一本书,比如菲尔·威尔逊(Phil Wilson)的《Windows Installer最终指南》。这和导师是最好的信息来源,因为这方面的培训太少了。

    我就是这样学习的:用一种几乎不熟悉的技术跳进一个新项目,这样我就可以从头开始,然后把它喝到膝盖周围:)。我想我已经把它放在胸部了。在SO和谷歌的帮助下,我学到了很多。我想这比看书快多了。到目前为止,我最显著的成就是为每个实例更新InstallShield的MSI转换,同时替换所有组件GUID。似乎可以使多实例安装非常干净地进行,而不必重复10次。我关于SetTargetPath的回答是否显示出对正在发生的事情有很好的理解?我正在设置属性,并在成本最终确定后为这些属性调用
    SetTargetPath
    ,因为我认为这就是我看到的标准更改目标对话框所做的。我发现改变INSTALLDIR的唯一方法是将它引用到另一个属性,然后对该属性调用SetTargetPath。仅将值设置为另一个字符串在对话框中起作用,但在安装文件时不起作用。