我在这里非常深入,所以请接受我的歉意,因为我不知道我在说什么。
我的目标是采用现有的 msi,对其进行一些更改,然后从中创建一个转换,使 msi 保持其原始状态。正如许多其他问题所建议的那样,我正在使用 DTF(WiX 的一部分)。
我的问题源于我需要两个数据库对象来创建转换;更改的数据库和参考。显然我不能从同一个文件创建两个对象,因为第一个对象锁定了它。最简单的选择是在临时目录中创建文件的副本并从新文件路径创建新对象。但是,除了保存转换之外,我真的想避免写入磁盘,因为该程序可能与不同的 VM、本地存储和网络存储混合使用。
根据我的收集,DTF 确实允许您从句柄创建数据库对象,因此我目前的方法是以某种方式在内存中使用句柄创建 msi 的副本,然后将其传递给数据库构造函数以创建一个临时对象我可以在创建转换之前对其进行更改。
不过,我不知道如何实现这一目标,我什至不确定这是否可能。MemoryMappedFile 似乎是一个不错的起点,但是当从文件创建一个文件时,它是持久的,我不知道如何基于文件创建非持久 mmf 或创建非持久 mmf 然后读取微星进去。
是否有任何可行的方法来创建磁盘上只有一个 msi 的转换?绝对欢迎任何想法/指导/呼吁接受写入磁盘,因为我显然超出了我的深度。