相关:从 DTF 访问 InstallShield“支持文件”(托管自定义操作)
我需要阅读属性SUPPORTDIR。根据这个论坛(http://community.flexerasoftware.com/showthread.php?t=180742&page=3),我需要使用 MsiGetProperty。
如何从 DTF 调用 MsiGetProperty?
相关:从 DTF 访问 InstallShield“支持文件”(托管自定义操作)
我需要阅读属性SUPPORTDIR。根据这个论坛(http://community.flexerasoftware.com/showthread.php?t=180742&page=3),我需要使用 MsiGetProperty。
如何从 DTF 调用 MsiGetProperty?
DTF的Session类有方法:
公共字符串 this[字符串属性] 获取:设置:
这被远程转移到非托管 C++ 端,在那里它们调用 MsiGetProperty 和 MsiSetProperty。它有点像 VBScript Session.Property("SUPPORTDIR") 只是更简单。
InstallShield 应该安排了一个名为 ISSetupFilesExtract 的自定义操作。记录您的安装并查看它是否正在执行并将路径分配给属性。
我能想到的唯一其他问题是,如果您正在做一个正确的 UAC 故事,即不提升您的 UI,然后提升您的执行序列,请确保 SUPPORTDIR 列在 SecureCustomProperties 属性中。只有在 UI 序列中获得值的“安全”属性才会被传递到执行序列。“PUBLIC”属性将默认恢复为安装程序开始执行时的状态。
我可以告诉您,我在 DTF 自定义操作中使用了 SUPPORTDIR(有时直接,有时通过 CustomActionData 序列化),我对此没有任何问题。
要将我的评论中的信息复制并扩展为从 DTF(托管自定义操作)访问 InstallShield“支持文件”:
Session 类的对象被传递给 DTF 中的自定义操作。使用 session["SUPPORTDIR"] 访问属性值(立即采取行动)。对于延迟操作,您必须通过 CustomActionData 传递它。此外,对于直接 CA,请确保您在 CostFinalize 之后安排了读取 SUPPORTDIR 的操作 - 目录表中的所有条目都可以作为属性访问的时间点。