【问题标题】:DTF and MsiGetPropertyDTF 和 MsiGetProperty
【发布时间】:2011-01-13 09:24:25
【问题描述】:

相关:Accessing InstallShield "Support Files" from DTF (Managed Custom Action)

我需要阅读属性 SUPPORTDIR。根据这个论坛(http://community.flexerasoftware.com/showthread.php?t=180742&page=3),我需要使用 MsiGetProperty。

如何从 DTF 调用 MsiGetProperty?

【问题讨论】:

    标签: wix installation windows-installer custom-action dtf


    【解决方案1】:

    DTF的Session类有方法:

    public string this[string property] get: set:

    这将被远程转移到非托管 C++ 端,在那里它们调用 MsiGetProperty 和 MsiSetProperty。它有点像 VBScript Session.Property("SUPPORTDIR") 只是更简单。

    InstallShield 应该安排了一个名为 ISSetupFilesExtract 的自定义操作。记录您的安装并查看它是否正在执行并将路径分配给属性。

    我能想到的唯一其他问题是,如果您正在做一个正确的 UAC 故事,即不提升您的 UI,然后提升您的执行序列,请确保 SUPPORTDIR 列在 SecureCustomProperties 属性中。只有在 UI 序列中获得值的“安全”属性才会被传递到执行序列。 “PUBLIC”属性将默认恢复为安装程序开始执行时的状态。

    我可以告诉您,我在 DTF 自定义操作中使用了 SUPPORTDIR(有时直接,有时通过 CustomActionData 序列化),我对此没有任何问题。

    【讨论】:

    • 没有 ISSetupFilesExtract。我在 Flexera 的板上读到我只需要添加/重新添加支持文件来解决这个问题。我这样做了,但仍然没有 ISSetupFilesExtract。
    • 这太愚蠢了。我现在明白了。我在“高级文件”(磁盘 1)下添加文件。我没有把它放在“语言无关”节点上。问:两者有什么区别?
    • Disk1 只是教构建引擎将这些文件暂存到媒体的根目录。对于删除 readme.txt 或您希望向用户提供但您不想作为先决条件自动化的软件包很有用(想想将 DirectX 放在 CD 上的游戏)。
    【解决方案2】:

    复制我评论中的信息并将其扩展到Accessing InstallShield "Support Files" from DTF (Managed Custom Action)

    Session 类的对象被传递给 DTF 中的自定义操作。使用 session["SUPPORTDIR"] 访问属性值(立即采取行动)。对于延迟操作,您必须通过 CustomActionData 传递它。此外,对于直接 CA,请确保您在 CostFinalize 之后安排读取 SUPPORTDIR 的操作 - 目录表中的所有条目都可以作为属性访问的时间点。

    【讨论】:

    • 即使在 CostFinalize 之后安排的立即操作,命令 session["SUPPORTDIR"] 也会返回一个空字符串。任何想法为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多