我有一个 Visual Studio 安装项目,其中包含许多安装图标。我遇到的问题与这些图标被删除有关。
如果我通过文件系统删除其中一个图标,MSI 修复工具会启动并阻止我删除此图标。(坏的)
我需要能够将这些图标安装为默认图标集,但能够在安装后永久删除它们,而无需启动 MSI 修复工具。
我需要做什么才能拥有一组将被安装但以后可以不受干扰地删除的文件。(非必要文件)
我有一个 Visual Studio 安装项目,其中包含许多安装图标。我遇到的问题与这些图标被删除有关。
如果我通过文件系统删除其中一个图标,MSI 修复工具会启动并阻止我删除此图标。(坏的)
我需要能够将这些图标安装为默认图标集,但能够在安装后永久删除它们,而无需启动 MSI 修复工具。
我需要做什么才能拥有一组将被安装但以后可以不受干扰地删除的文件。(非必要文件)
组件表中记录了支持的执行方式:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx
在 ComponentId 下,它表示可以将其设置为 null,以便 Windows 不会删除或修复该组件。Visual Studio 不支持此功能,因此您需要在使用(例如)Windows SDK 中的 Orca 构建 MSI 后对其进行编辑。对于您不想修复的文件,将 ComponentId 设置为 null,如果不明显,请查看 File 表中的文件名和关联的 Component 名称,它们将引用 Component 表。
您需要手动删除文件或在卸载时使用自定义操作删除文件。
FWIW,我相信您希望在没有 MSI 修复文件的情况下删除文件的设计目标是错误的。Windows Installer 是一个声明式安装框架,它“拥有”应用程序安装的所需状态,并将始终维护它。确实没有实际的解决方法。
您可以做的是设计您的应用程序,以便“库存”图标位于一个文件夹中,您的应用程序在第一次运行时将它们复制到另一个文件夹并从那里使用它们。MSI 永远不会知道这个其他文件夹,因此如果您为文件提供服务(添加/编辑/删除),MSI 不会干扰。但是,您永远不能删除股票图标,因为 MSI 会为您修复它。
使用该工具解决这不是一个容易的问题。问题是这个工具编写了广告中的每个快捷方式,每个文件都是它自己组件的密钥文件。它确实为这些不受欢迎的弹性调用做好了准备。
有一些方法可以在构建后的步骤中破解 MSI 以关闭广告和其他属性,但老实说,我最好的建议是切换到 Windows Installer XML 或 InstallShield Limited Edition 等工具集。您可以使用 WiX 来创作您的合并模块并像这里一样使用它:
http://blog.iswix.com/2011/03/redemption-of-visual-studio-deployment.html
我花了整整一年的时间(2006-2007)与这个工具作斗争,我希望我能把它拿回来。