Visual Studio 安装项目如何标记非必要文件?微星修复工具
Visual Studio Setup Project how to flag non-essential files? MSI repair tool
我有一个 Visual Studio 安装项目,其中包含许多安装图标。我 运行 关注这些图标被删除的问题。
如果我通过文件系统删除其中一个图标,MSI 修复工具会启动并阻止我删除该图标。 (差)
我需要能够将这些图标安装为默认图标集,但能够在安装后永久删除它们,而无需启动 MSI 修复工具。
我需要做什么才能拥有一组将被安装但以后可以删除而不受干扰的文件。(非必需文件)
使用该工具解决问题并不容易。问题是这个工具按照宣传的方式编写每个快捷方式,每个文件都是它自己组件的密钥文件。它确实让您为这些不希望的弹性调用做好了准备。
有一些方法可以在构建后步骤中破解 MSI 以关闭广告和其他属性,但老实说,我最好的建议是切换到工具集,例如 Windows Installer XML 或 InstallShield Limited版。您可以使用 WiX 编写您的合并模块并像这里一样使用它:
http://blog.iswix.com/2011/03/redemption-of-visual-studio-deployment.html
我花了整整一年的时间 (2006-2007) 与这个工具作斗争,我希望我能找回它。
FWIW,我认为您希望在 MSI 不修复文件的情况下删除文件的设计目标是错误的。 Windows 安装程序是一个声明式安装框架,它 "owns" 应用程序安装的理想状态,并将始终致力于维护它。确实没有解决这个问题的实用方法。
您可以设计您的应用程序,使 "stock" 图标位于一个文件夹中,然后您的应用程序首先将它们复制到另一个文件夹 运行 并从那里使用它们。 MSI 永远不知道这个其他文件夹,所以如果您服务文件 (add/edit/delete) MSI 不会干涉。但是您永远不能删除库存图标,因为 MSI 会为您修复它。
组件 table:
中记录了支持的执行此操作的方法
https://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx
在 ComponentId 下,它表示可以将其设置为空,这样组件就不会被 Windows 删除或修复。 Visual Studio 不支持此功能,因此您需要在使用(例如)Windows SDK 中的 Orca 构建 MSI 后对其进行编辑。将您不想修复的文件的 ComponentId 设置为 null,如果它不明显,则查看文件 table 以获取将引用组件 table 的文件名和相关组件名称。
您需要在卸载时手动或使用自定义操作删除文件。
我有一个 Visual Studio 安装项目,其中包含许多安装图标。我 运行 关注这些图标被删除的问题。
如果我通过文件系统删除其中一个图标,MSI 修复工具会启动并阻止我删除该图标。 (差)
我需要能够将这些图标安装为默认图标集,但能够在安装后永久删除它们,而无需启动 MSI 修复工具。
我需要做什么才能拥有一组将被安装但以后可以删除而不受干扰的文件。(非必需文件)
使用该工具解决问题并不容易。问题是这个工具按照宣传的方式编写每个快捷方式,每个文件都是它自己组件的密钥文件。它确实让您为这些不希望的弹性调用做好了准备。
有一些方法可以在构建后步骤中破解 MSI 以关闭广告和其他属性,但老实说,我最好的建议是切换到工具集,例如 Windows Installer XML 或 InstallShield Limited版。您可以使用 WiX 编写您的合并模块并像这里一样使用它:
http://blog.iswix.com/2011/03/redemption-of-visual-studio-deployment.html
我花了整整一年的时间 (2006-2007) 与这个工具作斗争,我希望我能找回它。
FWIW,我认为您希望在 MSI 不修复文件的情况下删除文件的设计目标是错误的。 Windows 安装程序是一个声明式安装框架,它 "owns" 应用程序安装的理想状态,并将始终致力于维护它。确实没有解决这个问题的实用方法。
您可以设计您的应用程序,使 "stock" 图标位于一个文件夹中,然后您的应用程序首先将它们复制到另一个文件夹 运行 并从那里使用它们。 MSI 永远不知道这个其他文件夹,所以如果您服务文件 (add/edit/delete) MSI 不会干涉。但是您永远不能删除库存图标,因为 MSI 会为您修复它。
组件 table:
中记录了支持的执行此操作的方法https://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx
在 ComponentId 下,它表示可以将其设置为空,这样组件就不会被 Windows 删除或修复。 Visual Studio 不支持此功能,因此您需要在使用(例如)Windows SDK 中的 Orca 构建 MSI 后对其进行编辑。将您不想修复的文件的 ComponentId 设置为 null,如果它不明显,则查看文件 table 以获取将引用组件 table 的文件名和相关组件名称。
您需要在卸载时手动或使用自定义操作删除文件。