Windows installer 如何在升级时删除密钥文件属性而不过度写入文件

Windows installer 如何在升级时删除密钥文件属性而不过度写入文件,windows-installer,installation,Windows Installer,Installation,我安装了一个MSI,其中包括三个带有关键文件的组件。这些组件包括.mdf和.ldf文件。这三个组件中有一个是mdf和ldf,它包含客户数据,因此它还具有此组件的从不覆盖和永久属性 我们公司现在希望支持允许客户将数据库“移动”到其他目录/驱动器。但是,当用户启动应用程序时,由于缺少关键文件,文件恢复能力开始发挥作用,并将新文件添加到原始目标位置。我想停止这种行为 我从.mdf文件中删除了密钥文件属性。在重大升级时,一切都应该正常;但是,安装会尝试替换mdf和ldf数据库文件,即使设置了永久和从不覆

我安装了一个MSI,其中包括三个带有关键文件的组件。这些组件包括.mdf和.ldf文件。这三个组件中有一个是mdf和ldf,它包含客户数据,因此它还具有此组件的
从不覆盖
永久
属性

我们公司现在希望支持允许客户将数据库“移动”到其他目录/驱动器。但是,当用户启动应用程序时,由于缺少关键文件,文件恢复能力开始发挥作用,并将新文件添加到原始目标位置。我想停止这种行为

我从.mdf文件中删除了密钥文件属性。在重大升级时,一切都应该正常;但是,安装会尝试替换mdf和ldf数据库文件,即使设置了永久和从不覆盖属性

我的问题是,是否有一种安全的方法来处理从组件中删除密钥文件属性而不在主要升级时进行文件覆盖

更新:
  • 我已尝试强制卸载,但如果在主要升级之前强制卸载,这仍然是一个问题。我怀疑这是因为即使在卸载中,该组件仍然存在。
    从不覆盖
    标志需要一个密钥文件或注册表项路径来确定是否应该安装它

  • 我的期望是,组件应该处理删除密钥文件属性的问题,并且仍然遵守
    永不覆盖
    和永久属性。根据测试,我的期望是错误的


谢谢

MSI是一种部署技术—它的任务是将指定的文件安装到正确的位置,并确保它们是正确的版本。自我修复功能(或弹性)是实现这一目标的机制。您不能以任何合理的方式禁用它,但有几种方法可以处理此问题

移动已安装的文件后,Windows Installer将不再跟踪这些文件,Windows Installer将把基本文件版本放回其跟踪已安装状态的位置(您最初安装它们的位置)

1:空白组件GUID:可以为MSI组件设置空白GUID。这将允许组件在第一次安装时安装,并且从那时起Windows Installer根本不会跟踪该组件。据我回忆,该组件将永远不会被卸载,即使文件丢失,也不应该进行自我修复。我将在一秒钟内对此进行测试以验证。此外,在移动文件后,新的升级安装可能会将新的数据库文件放回默认的安装位置

2:将已安装的数据库文件视为只读文件:我认为这是一个更好的选择。您可以像以前一样安装数据库文件,并在默认安装位置将其视为“只读”基本版本。然后更新应用程序,将这些已安装的数据库文件复制到客户希望存储它们的位置,或指定的默认位置

Windows Installer将永远不会跟踪新位置的文件,因此不会遭受任何意外的覆盖、卸载或恢复。您甚至可以向应用程序中添加一项功能,以重新复制只读的基本数据库文件,以覆盖正在使用的数据库文件,但为什么要这样做呢?这显然会删除所有用户创建的数据库内容


至于将数据库文件复制到的位置。这可以是任何地方,如果您希望每个用户都拥有数据库的私有副本,甚至“我的文档”文件夹也可以工作。但是,如果所有Windows用户都应该共享一个实时数据库,我建议将文件放在Windows共享位置(URL)上。您甚至可以在安装过程中创建这样的共享。

MSI是一种部署技术,它的任务是将指定的文件安装到正确的位置,并确保它们是正确的版本。自我修复功能(或弹性)是实现这一目标的机制。您不能以任何合理的方式禁用它,但有几种方法可以处理此问题

移动已安装的文件后,Windows Installer将不再跟踪这些文件,Windows Installer将把基本文件版本放回其跟踪已安装状态的位置(您最初安装它们的位置)

1:空白组件GUID:可以为MSI组件设置空白GUID。这将允许组件在第一次安装时安装,并且从那时起Windows Installer根本不会跟踪该组件。据我回忆,该组件将永远不会被卸载,即使文件丢失,也不应该进行自我修复。我将在一秒钟内对此进行测试以验证。此外,在移动文件后,新的升级安装可能会将新的数据库文件放回默认的安装位置

2:将已安装的数据库文件视为只读文件:我认为这是一个更好的选择。您可以像以前一样安装数据库文件,并在默认安装位置将其视为“只读”基本版本。然后更新应用程序,将这些已安装的数据库文件复制到客户希望存储它们的位置,或指定的默认位置

Windows Installer将永远不会跟踪新位置的文件,因此不会遭受任何意外的覆盖、卸载或恢复。您甚至可以向应用程序中添加一项功能,以重新复制只读的基本数据库文件,以覆盖正在使用的数据库文件,但为什么要这样做呢?这显然会删除所有用户创建的数据库内容

至于将数据库文件复制到的位置。这可以是任何地方,如果您希望每个用户都拥有数据库的私有副本,甚至“我的文档”文件夹也可以工作。怎么