【发布时间】:2019-02-22 10:15:04
【问题描述】:
MSI 安装将调用我的(本机/C++)自定义操作函数。由于 DLL 是新加载的,并且 MSIEXEC.EXE 进程是为每个函数单独启动的(可调用的操作,在 MSI/WiX 脚本中指定),因此我无法在 C/C++ 程序中使用任何全局数据。
我可以如何(或在哪里)存储有关正在进行的安装的一些信息? 我不能使用命名对象(如共享内存),因为启动 DLL 以调用“动作”函数的“进程”将退出,并且操作系统不会保留命名对象。
我可能会使用外部文件来存储,但是我怎么知道(在 DLL 的函数中):
- 何时删除外部文件。
- 什么时候发现这个函数调用是第一次调用(动作/函数调用
Before="LaunchConditions"可能有帮助,不是很确定)。
如果我无法删除文件,我无法知道“信息”是最新的还是陈旧的(即属于先前失败/成功的 MSI 运行)。
“临时 MSI 表”我听说过,但不知道如何使用。
【问题讨论】:
-
也许您可以简要描述一下您的自定义操作是做什么的?我们经常发现它们可以被标准结构和/或应用程序启动顺序调整所取代。
-
我所关心的,确实处理现有的复杂设置(非 MSI),它需要保留有关现有设置的信息(文件/注册表/某些状态等)。这是必需的,以便当 MSI 失败时,自定义操作可以返回到旧的设置/安装。无法(相信这一点)将其保存在 MSI 中,必须手动完成。
标签: c++ windows wix windows-installer data-persistence