【问题标题】:WIX: Using a temporary file during installWIX:在安装过程中使用临时文件
【发布时间】:2010-04-12 19:01:42
【问题描述】:

我正在编写 WIX 安装程序,我有以下要求:
在安装过程中,我需要将安装程序中包含的文件(我们称之为 A)的绝对路径传递给 COM 组件,该组件已经存在于硬盘驱动器上并且是另一个程序的一部分。我已经编写了一个适当的自定义操作,它需要文件 A 的路径。我不想将 A 作为安装在 Program Files 文件夹中并在卸载过程中删除的文件包含在内。相反,我只想将 A 临时放在硬盘上,调用我的自定义操作,这将导致 COM 组件使用 A 的内容,然后从磁盘中删除 A。有没有简单的方法来实现这个目标?

我尝试使用二进制表并将 A 存储在那里,但是我不知道如何使用绝对路径引用 A。我知道我可以将 A 放在 MSI 文件之外,但我想将每个文件安装程序需要的文件保存在一个 MSI 中。

任何帮助将不胜感激。

【问题讨论】:

    标签: binary wix custom-action temporary-files


    【解决方案1】:

    删除 MSI 安装的文件意味着 MSI 将认为它“损坏”并在被要求时尝试自动修复它。这在几种情况下会自动发生(例如,广告的快捷方式和 COM 注册),所以我建议不要这样做。把文件留在那里——它已经完成了它的工作,把它留在那里没有任何害处。

    【讨论】:

    • 如果安装的文件位于 IIS 虚拟文件夹中,而您不希望别人下载此文件怎么办?
    • 该文件可以使用空白组件 GUID 安装,这样如果删除它就永远无法触发自我修复。另一方面,我同意它应该简单地留在安装它的磁盘上的想法。空白组件 GUID 还意味着文件将无法正确卸载,除非您创建了 RemoveFile 条目。
    • Wix 是否讨论过“设置文件”的概念?这是一个 Installshield 概念,其中将徽标、许可协议、声音文件等资源文件提取到 %TMP% 文件夹中,并且可以在安装过程中通过使用路径宏的自定义操作代码进行引用。在某些情况下这会有所帮助 - 也许这个概念已经在 Wix 中了。
    • 我相信有一个开放的功能请求,但没有人实现过这样的功能。这并不像听起来那么简单,因为它必须以安全的方式实施;转储到 %TMP% 是不够的。
    • 提升的自定义操作从安全位置运行。
    【解决方案2】:

    我会采用这种方法。

    将文件“A”安装到任意目录。运行更新 COM 组件所需的自定义操作。然后运行另一个自定义操作或修改当前写入的操作以在文件不再使用后将其删除。这不会留下文件“A”的痕迹,如果您将自定义操作安排为仅在安装期间运行,您将不必担心卸载时的问题。

    【讨论】:

    • 好主意。假设我将安装一个文件,并在安装过程结束时使用我的自定义操作将其删除。卸载过程中文件丢失不会有问题吗?我想卸载程序不会将丢失的文件视为错误?
    • 不,卸载不会出错。如果卸载程序没有看到文件,它就会被它吹走。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多