【问题标题】:How does the SetTargetPath event in InstallShield Basic MSI work?InstallShield Basic MSI 中的 SetTargetPath 事件如何工作?
【发布时间】:2015-09-15 13:12:06
【问题描述】:

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

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

documentation on SetTargetPath 已经读了 3 遍了,还是没意思。

【问题讨论】:

    标签: windows-installer installshield


    【解决方案1】:

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

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

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

    【讨论】:

    • 我发现更改 INSTALLDIR 的唯一方法是将其引用到另一个属性,然后针对该属性调用 SetTargetPath。只需将值设置为另一个字符串在对话框期间有效,但在安装文件的位置时不起作用。
    【解决方案2】:

    您想研究“文件成本核算”(Cost Initialize、Cost Finalize)。在计算成本之前,您可以使用 Type 51 Set Property 自定义操作。计算成本后,您必须使用 Type 35 Set Directory 自定义操作。这是因为需要重新计算成本。

    我注意到您有很多 MSI 问题。您可能想拿起一本书,例如 Phil Wilson 的 The Definitive Guide to Windows Installer。那和导师是最好的信息来源,因为这方面的培训很少。

    【讨论】:

    • 这就是我学习的方式:跳入一个新项目,使用一种几乎不熟悉的技术,所以我完全不知所措,然后把它全部喝掉,直到水流到我的膝盖周围 :)。我想我现在已经把它降到胸部了。在 SO 和 Google 的帮助下,我学到了很多东西。我认为比书快得多。到目前为止,我最杰出的成就是为每个实例更新 InstallShield 的 MSI 转换的程序,以替换所有组件 GUID。似乎无需将所有内容复制 10 次,就可以让多实例安装运行得非常干净。
    • 我对 SetTargetPath 的回答是否表明对正在发生的事情有很好的理解?在 Cost Finalize 之后,我既要设置属性,又要为这些属性调用 SetTargetPath,因为我认为这就是我看到的标准更改目标对话框所做的事情。它似乎表现良好,日志看起来也不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多