我们正在使用c#在Install Shield中使用自定义操作,我希望在多个自定义操作之间共享数据。
我已经有了从第一个自定义操作将其写入文本文件的方法,以及从该文件读取值的其他自定义操作。 但由于以下原因,我认为这不是一个好方法。
所以,我正在寻找可以处理这种情况的最佳实践解决方案..
期待一些很棒的回复..
答案 0 :(得分:0)
我们使用2种方法来做到这一点 - 如果我们只需要共享文本数据并且仅在一个安装过程中共享 - 我们使用公共属性。第一个CA设置属性,其他CA读取此数据。 MsiSetProperty和MsiGetProperty会帮助您,但不要忘记Accessing or Setting Windows Installer Properties Through Deferred, Commit, and Rollback Custom Actions - 如果需要在不同的安装过程之间共享数据 - 我们使用注册表和系统搜索。第一个安装程序将数据写入注册表中的某个位置 - 其他安装程序在系统搜索的帮助下读取它并设置适当的属性。
答案 1 :(得分:0)
据我所知,理论是立即行动可以确切地确定与之相关的后续行动需要知道什么,因此可以根据需要为后续行动设置属性或CustomActionData。属性可以存储您可以在零终止字符串中表示的任何序列化格式。这是Windows Installer真正支持的一种机制,用于在即时操作之间进行通信,尤其是延迟操作。
然而在实践中,这并不总是正常的。有时,读取机器的当前状态需要立即操作不可用的管理权限。有时为了运行有效的回滚或提交操作,您需要知道在进行更改的高架尝试期间发生了什么。即使在没有提升特权的情况下收集信息也是如此,可能很难提前计划这一点,并且很容易在易用性和理论正确性之间进行权衡。
通过属性机制共享文件名并在您描述时更新共享文件并不罕见。核心差异是文件名不是预先确定的;它存储在%TEMP%或类似物中,其名称通过属性进行通信。这解决了提升问题,但不一定是安全问题。