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

How does the SetTargetPath event in InstallShield Basic MSI work?

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

我不明白的是为什么SetTagetPath只有一个参数。 MsiSetTargetPath函数除了安装句柄外还带2个参数,所以不明白为什么SetTargetPath事件只带1个,我想设置一个指定的目录变量来引用指定的目录。这需要两个参数。他们如何只使用一个参数?

documentation on SetTargetPath我看了3遍还是没看懂

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

  1. 将同名的 属性 设置为新值。
  2. 调用 SetTargetPath 提供 属性 名称以将值从 属性 复制到目录中。

在执行此操作时,请注意如果提供的 属性 是方括号,则应引用另一个 属性 名称。所以如果要复制到目录变量的值直接在属性中,不要使用括号。

您想研究 "file costing"(成本初始化、成本最终确定)。在计算成本之前,您可以使用 Type 51 Set 属性 自定义操作。计算成本后,您必须使用 Type 35 Set Directory 自定义操作。这是因为需要重新计算成本。

我注意到你有很多 MSI 问题。您可能想要读一本书,例如 Phil Wilson 的 Windows 安装程序权威指南。那和导师是最好的信息来源,因为这方面的培训很少。